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

Java多线程函数的使用说明和实例演示

发布时间:2023-06-11 12:50:02

Java多线程是Java语言中一个非常重要的特性,这使得开发人员可以在一个应用程序或者系统中同时运行多个任务。多线程程序可以更加高效地利用计算机资源,提高程序的响应速度和并发性能。

在Java中,创建多线程程序非常简单,只需要继承Thread类并重写run()方法或者实现Runnable接口并实现run()方法,然后调用start()方法启动线程即可。下面介绍一些常用的多线程函数。

1. sleep()函数

sleep()函数是线程类中的一个静态方法,调用该方法可以使当前线程暂停执行指定的毫秒数。这个方法主要用于控制线程的执行时间,可以让线程在执行一段时间后休眠一段时间,以免过多占用CPU资源。

例如,实现一个定时器程序:

public class TimerThread extends Thread{
    public void run(){
        try{
            for(int i=0;i<10;i++){
                System.out.println("当前时间:"+new Date());
                //线程休眠一秒
                Thread.sleep(1000);
            }
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

然后在主函数中调用该线程:

public class Main{
    public static void main(String[] args){
        TimerThread t=new TimerThread();
        t.start();
    }
}

这个程序会输出当前时间,并且每隔1秒钟输出一次。

2. join()函数

join()函数是Thread类中的一个方法,调用该方法可以使当前线程等待另一个线程执行完毕后再继续执行。这个方法主要用于控制线程的执行顺序,可以让一个线程在另一个线程完成任务后再执行,以实现线程之间的同步。

例如,实现一个简单的线程同步程序:

public class SyncThread extends Thread{
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println("线程:"+Thread.currentThread().getName()+",输出:"+i);
        }
    }
}

public class Main{
    public static void main(String[] args) throws InterruptedException{
        SyncThread t1=new SyncThread();
        SyncThread t2=new SyncThread();
        SyncThread t3=new SyncThread();
        t1.start();
        //等待t1线程执行完毕
        t1.join();
        t2.start();
        //等待t2线程执行完毕
        t2.join();
        t3.start();
    }
}

这个程序会创建3个线程,每个线程输出1-9的数字,在执行前需要等待前面的线程执行完毕后才能继续执行。输出结果如下:

线程:Thread-0,输出:0
线程:Thread-0,输出:1
线程:Thread-0,输出:2
线程:Thread-0,输出:3
线程:Thread-0,输出:4
线程:Thread-0,输出:5
线程:Thread-0,输出:6
线程:Thread-0,输出:7
线程:Thread-0,输出:8
线程:Thread-1,输出:0
线程:Thread-1,输出:1
线程:Thread-1,输出:2
线程:Thread-1,输出:3
线程:Thread-1,输出:4
线程:Thread-1,输出:5
线程:Thread-1,输出:6
线程:Thread-1,输出:7
线程:Thread-1,输出:8
线程:Thread-2,输出:0
线程:Thread-2,输出:1
线程:Thread-2,输出:2
线程:Thread-2,输出:3
线程:Thread-2,输出:4
线程:Thread-2,输出:5
线程:Thread-2,输出:6
线程:Thread-2,输出:7
线程:Thread-2,输出:8

3. yield()函数

yield()函数是Thread类中的一个静态方法,调用该方法可以使当前线程放弃CPU资源,使其他线程有机会运行。这个方法主要用于控制线程的执行顺序,可以让CPU更加公平地分配执行时间,提高程序的并发性能。

例如,实现一个简单的线程调度程序:

public class ScheduleThread extends Thread{
    private int id;
    private static int count;
    
    public ScheduleThread(){
        this.id=++count;
    }
    
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println("线程:"+id+",输出:"+i);
            //线程放弃CPU资源
            Thread.yield();
        }
    }
}

public class Main{
    public static void main(String[] args){
        ScheduleThread t1=new ScheduleThread();
        ScheduleThread t2=new ScheduleThread();
        ScheduleThread t3=new ScheduleThread();
        t1.start();
        t2.start();
        t3.start();
    }
}

这个程序会创建3个线程,每个线程输出1-9的数字,并且在输出前调用yield()方法放弃CPU资源。输出结果不一定按照线程顺序,可能会产生一些交替输出的效果。

4. interrupt()函数

interrupt()函数是Thread类中的一个方法,调用该方法可以中断一个线程的执行,并且抛出InterruptedException异常。这个方法主要用于控制线程的执行状态,可以让一个线程在外部条件满足时及时中断执行。

例如,实现一个简单的线程中断程序:

public class InterruptThread extends Thread{
    public void run(){
        while(true){
            if(Thread.interrupted()){
                System.out.println("线程已中断。");
                break;
            }
            System.out.println("线程正在执行。");
        }
    }
}

public class Main{
    public static void main(String[] args) throws InterruptedException{
        InterruptThread t=new InterruptThread();
        t.start();
        //休眠一秒后中断t线程
        Thread.sleep(1000);
        t.interrupt();
    }
}

这个程序创建一个线程,然后在执行一段时间后中断线程,并且输出提示信息。输出结果如下:

线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程正在执行。
线程已中断。

5. wait()和notify()函数

wait()和notify()函数是Object类中的方法,任何Java对象都可以调用这两个方法。wait()方法可以使当前线程等待另一个线程的通知,notify()方法可以通知等待的线程继续执行。这两个方法主要用于控制线程的同步,可以让一个线程等待另一个线程的结果进行下一步操作。

例如,实现一个简单的生产者和消费者程序:

`

public class ProducerConsumer{

private int count;

public synchronized void produce(){

while(count>=10){

try{

System.out.println("仓库已满。");

//等待消费者通知

wait();

}catch(InterruptedException e){

e.printStackTrace();

}

}

count++;

System.out.println("生产者生产了1件商品,当前仓库数量:"+count);

//通知消费者可以购买

notify();

}

public synchronized void consume(){

while(count<=0){

try{

System.out.println("仓库已空。");

//等待生产者通知

wait();

}catch(InterruptedException e){

e.printStackTrace();

}

}

count--;

System.out.println("消费者购买了1件商品,当前仓库数量:"+count);

//通知生产者可以生产

notify();

}

}

public class ProducerThread extends Thread{

private ProducerConsumer pc;

public ProducerThread(ProducerConsumer pc){

this.pc=pc;

}

public void run(){

for(int i=0;i<10;i++){