java实现多线程两种方法的比较

java实现多线程两种方法的比较

先看一下java线程运行时各个阶段的运行状态


java实现多线程有两种方法

1、继承Thread类

2、实现Runnable接口

这两种方法的共同点:

不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。

两种方法的不同点:

1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承

2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

基于以上两点所以建议用第二种方法

下面用例子来做说明

程序1:

 

package  com.dr.runnable1;
// 一个类只要继承了Thread类,则此类就是多线程类
class  MyThread  extends  Thread
{
    
private String name;
    
public MyThread(String name)
    
{
        
this.name=name;
    }

    
//如果要使用多线程,则必须有一个方法的主体
    public void run()
    
{
        
//打印输出
        for(int i=0;i<10;i++)
        
{
            System.out.println(
this.name+"----->运行、、、、");
        }

    }

}

public   class  Demo1  {
    
public static void main(String args[])
    
{

//第一种方法
         Runnable r1=new MyThread("线程A");
        Runnable r2
=new MyThread("线程B");
        Runnable r3
=new MyThread("线程C");
       Thread t1
=new Thread(r1);
       Thread t2
=new Thread(r2);
       Thread t3
=new Thread(r3);
       t1.start();
       t2.start();
       t3.start();

  
//        mt1.run();//线程执行,使用start方法
//        mt2.run();
//        mt3.run();

//第二种方法

//       MyThread mt1=new MyThread("线程A");
//        MyThread mt2=new MyThread("线程B");
//        MyThread mt3=new MyThread("线程C");
//        mt1.start();
//        mt1.start();//线程只能启动一次
//        mt2.start();
//        mt3.start(); 

    }
 

}
 

程序的运行结果是:

java实现多线程两种方法的比较_第1张图片

这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程

第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程

程序2:

 

package  com.dr.runnable1;
class  MyThread1  implements  Runnable
{
    
private  int ticket=10;
    
public void run()
    
{
        
for(int i=0;i<500;i++)
        
{
            
if(this.ticket>0)
            
{
                System.out.println(
"卖票----->"+(this.ticket--));
            }

        }

    }

}

public   class  Demo2  {
    
public static void main(String args[])
    
{
           MyThread1 mt
=new MyThread1();
        Thread t1
=new Thread(mt);
        Thread t2
=new Thread(mt);
        Thread t3
=new Thread(mt);
        t1.start();
        t2.start();
        t3.start();
    }
 

}
 

程序运行结果:

java实现多线程两种方法的比较_第2张图片

这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。

你可能感兴趣的:(java实现多线程两种方法的比较)