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

Java中线程编程实现的常见函数及示例

发布时间:2023-06-18 07:12:25

Java中线程编程是一种非常重要的技能,因为它是实现并发程序的一种常见方法。在这篇文章中,我们将介绍Java中线程编程实现的常见函数及示例。

1. start()函数

在Java中,线程启动的第一个函数是start()。它是Thread类的函数,用于启动一个新的线程。例如,下面是一个简单的示例:

public class MyThread extends Thread {
    public void run() {
        System.out.println("Hello from " + Thread.currentThread().getName());
    }
 
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

在这个示例中,我们创建了一个MyThread类,它扩展了Thread类,并重写了run()函数。当我们调用thread.start()时,就会执行MyThread类中的run()函数。

2. join()函数

join()函数是一个Thread类的函数,它在调用线程上等待一个线程终止。例如,下面是一个示例:

public class MyThread extends Thread {
    public void run() {
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Hello from " + Thread.currentThread().getName());
    }
 
    public static void main(String[] args) throws InterruptedException {
        MyThread thread = new MyThread();
        thread.start();
        thread.join();
        System.out.println("Hello from main thread");
    }
}

在这个示例中,我们创建了一个名为MyThread的类,它扩展了Thread类,并在其中实现了run()函数。当我们启动线程并调用thread.join()时,主线程将被阻塞,直到MyThread线程终止。

3. sleep()函数

sleep()函数是线程类的一个静态函数,它使当前线程进入休眠状态,暂时放弃CPU的处理器时间,让其他线程有机会执行。例如:

public class MyThread extends Thread {
    public void run() {
        try {
            for (int i = 0; i < 10; i++) {
                System.out.print(i + " ");
                sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

在这个示例中,我们创建了一个MyThread类,它扩展了Thread类,并在其中实现了run()函数。在这个函数中,我们使用sleep()函数来使线程休眠1秒钟。

4. interrupt()函数

interrupt()函数是Thread类的一个函数,它用于中断线程。例如,下面是一个示例:

public class MyThread extends Thread {
    public void run() {
        try {
            while (!isInterrupted()) {
                System.out.println("Hello from " + Thread.currentThread().getName());
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Thread stopped.");
    }
 
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        thread.interrupt();
    }
}

在这个示例中,我们创建了一个MyThread类,它扩展了Thread类并实现了run()函数。在这个函数中,我们使用isInterrupted()函数检查线程是否被中断,如果没有,就打印一条消息并休眠1秒钟。在主线程中,我们等待5秒钟,然后中断MyThread线程。

5. notify()和wait()函数

notify()和wait()函数是用于线程之间通信的函数。它们必须在同步块中使用,因此它们通常与synchronized关键字一起使用。例如:

public class MyThread {
    public void printNumber() throws InterruptedException {
        synchronized (this) {
            for (int i = 0; i <= 10; i++) {
                System.out.println(i + " ");
                notify();
                wait();
            }
        }
    }
 
    public static void main(String[] args) throws InterruptedException {
        MyThread thread = new MyThread();
        Thread t1 = new Thread(() -> {
            try {
                thread.printNumber();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
 
        Thread t2 = new Thread(() -> {
            try {
                thread.printNumber();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
 
        t1.start();
        t2.start();
        t1.join();
        t2.join();
    }
}

在这个示例中,我们创建了一个名为MyThread的类,它有一个printNumber()函数。在这个函数中,我们使用synchronized关键字来确保线程之间的同步。在循环中,我们打印数字并使用notify()函数来通知另一个正在等待的线程,然后调用wait()函数阻塞当前线程,直到收到另一个线程的通知。

这些是Java中常见的线程编程函数和示例。线程编程是一项复杂的技能,但如果你掌握了上述基础,你就可以开始构建出更加复杂的多线程应用程序。