欢迎访问宙启技术站
智能推送

Java中的多线程函数使用实例分享

发布时间:2023-05-26 13:39:39

在Java中,多线程是一种功能强大的编程技术,可以提高程序的性能和响应速度。Java提供了许多多线程函数和工具,可以帮助我们更轻松地创建和管理线程。在本文中,我将介绍Java中的一些常用多线程函数,包括Thread.sleep()、Thread.join()、Thread.yield()、wait()和notify()等,并分享一些使用实例。

1. Thread.sleep()

Thread.sleep()函数可以让当前线程暂停指定的时间,以毫秒为单位。它的语法如下:

public static void sleep(long millis) throws InterruptedException

其中,millis参数表示要暂停的时间,单位为毫秒。注意,调用sleep()函数会阻塞当前线程,所以在使用它时要注意线程的调度和资源占用。下面是一个简单的例子:

public class SleepDemo {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Start...");
        Thread.sleep(1000);
        System.out.println("End.");
    }
}

在这个例子中,我们让主线程暂停1秒钟,然后输出一条消息。注意,sleep()函数可能会抛出InterruptedException异常,所以我们在函数声明中使用了throws语句来抛出这个异常。

2. Thread.join()

Thread.join()函数可以让一个线程等待另一个线程完成后再继续执行。它的语法如下:

public final void join() throws InterruptedException
public final synchronized void join(long millis) throws InterruptedException

其中, 个函数表示等待被调用线程完成,第二个函数表示等待被调用线程完成,或者超时指定的时间后继续执行。下面是一个使用join()函数的例子:

public class JoinDemo {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("Thread 1 is running...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread 1 is done.");
        });
        Thread t2 = new Thread(() -> {
            System.out.println("Thread 2 is running...");
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread 2 is done.");
        });

        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println("All threads are done.");
    }
}

在这个例子中,我们创建了两个线程t1和t2,并让它们分别休眠1秒钟和1.5秒钟。然后在主线程中,调用了t1.join()和t2.join()函数,让主线程等待t1和t2线程执行完成后再继续执行。最后输出一条“所有线程都完成了”的消息。

3. Thread.yield()

Thread.yield()函数可以让当前线程礼让一下,让其他线程有机会执行。它的语法如下:

public static native void yield();

调用yield()函数会让当前线程放弃当前的CPU时间片,让其他线程有机会执行。注意,yield()函数不会暂停当前线程,而是让它进入就绪状态,等待下一次调度。下面是一个简单的例子:

public class YieldDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Thread 1 is running...");
                Thread.yield();
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Thread 2 is running...");
                Thread.yield();
            }
        });

        t1.start();
        t2.start();
    }
}

在这个例子中,我们创建了两个线程t1和t2,并让它们分别输出5条消息。在输出每条消息之后,调用了Thread.yield()函数,让当前线程礼让一下。这样做可以提高程序的并发性,让多个线程更好地共享CPU资源。

4. wait()和notify()

wait()和notify()是Java中实现线程同步的重要工具。wait()函数让一个线程等待,直到另一个线程通知它可以继续执行。notify()函数用于唤醒一个等待的线程。它们的语法如下:

public final void wait() throws InterruptedException
public final void notify()

在调用wait()函数时,当前线程会进入等待状态,直到另一个线程调用notify()函数后才会继续执行。下面是一个使用wait()和notify()函数的例子:

public class WaitNotifyDemo {
    public static void main(String[] args) {
        Object lock = new Object();
        Thread t1 = new Thread(() -> {
            synchronized (lock) {
                try {
                    System.out.println("Thread 1 is waiting...");
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1 is done.");
            }
        });
        Thread t2 = new Thread(() -> {
            synchronized (lock) {
                System.out.println("Thread 2 is running...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.notify();
            }
        });

        t1.start();
        t2.start();
    }
}

在这个例子中,我们创建了两个线程t1和t2,并让t1等待t2的通知。在t2中,我们让它休眠1秒钟,然后调用lock.notify()函数唤醒t1线程。最后输出一条“线程1已完成”的消息。

总结:

在Java中,多线程是一个非常重要的编程技术,可以极大地提高程序的性能和响应速度。Java提供了许多多线程函数和工具,我们可以根据实际需要选择使用。在使用多线程函数时,要注意线程的调度和资源占用,以充分发挥多线程的优势。