Java多线程实现

Java多线程实现

①继承Thread类

程序在运行主方法main的时候,Java虚拟机会启动一个进程,主线程main在main()调用的时候被创建,随着两个对象的start()方法的调用,另外两个线程也启动了,于是多线程就实现了!

start()方法调用后并不会马上执行多线程代码,而是先使线程编程可运行状态(Runnable),什么时候运行是操作系统决定的!(所以每次跑代码输出的都可能不一样)。多线程程序是乱序执行的。

Thread.sleep()方法调用是为了不让当前线程霸占所获取的CPU资源。

注意:重复调用start方法会出现java.lang.liiegalThreadStateException异常!!

public class Thread1 extends Thread{
    private String name;
    public Thread1(String name){
        this.name = name;
    }
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println(name+"运行:"+i);
            try{
                sleep((int)Math.random()*10);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Thread1 a = new Thread1("A");
        Thread1 b = new Thread1("B");
        a.start();
        b.start();
    }
}

②实现Runnable接口(推荐)

实际上Thread类也是实现了Runnable接口的类,在启动多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target)构造出对象,然后调用Thread对象的start()方法来运行多线程代码。

public class Thread2 implements Runnable{
    private String name;
    public Thread2(String name){
        this.name = name;
    }

    @Override
    public void run() {
        for (int i=0;i<10;i++){
            System.out.println(name+"运行:"+i);
            try {
                Thread.sleep((int)Math.random()*10);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new Thread2("C")).start();
        new Thread(new Thread2("D")).start();
    }
}

③Thread和Runnable的区别

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类

 

posted @ 2022-02-16 00:32  霜鱼CC  阅读(8)  评论(0)    收藏  举报