天天看点

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

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

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

java实现多线程有两种方法

1、继承thread类

2、实现runnable接口

这两种方法的共同点:

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

两种方法的不同点:

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

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

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

下面用例子来做说明

程序1:

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

package com.dr.runnable1;

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

//一个类只要继承了thread类,则此类就是多线程类

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

class mythread extends thread

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

{

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

    private string name;

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

    public mythread(string name)

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

        this.name=name;

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

    }

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

    //如果要使用多线程,则必须有一个方法的主体

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

    public void run()

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

        //打印输出

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

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

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

            system.out.println(this.name+"----->运行、、、、");

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

        }

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

}

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

public class demo1 

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

    public static void main(string args[])

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

//第一种方法

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

         runnable r1=new mythread("线程a");

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

        runnable r2=new mythread("线程b");

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

        runnable r3=new mythread("线程c");

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

       thread t1=new thread(r1);

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

       thread t2=new thread(r2);

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

       thread t3=new thread(r3);

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

       t1.start();

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

       t2.start();

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

       t3.start();

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

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

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

//        mt2.run();

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

//        mt3.run();

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

//第二种方法

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

//       mythread mt1=new mythread("线程a");

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

//        mythread mt2=new mythread("线程b");

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

//        mythread mt3=new mythread("线程c");

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

//        mt1.start();

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

//        mt1.start();//线程只能启动一次

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

//        mt2.start();

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

//        mt3.start(); 

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

    } 

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

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

程序的运行结果是:

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

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

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

程序2:

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

class mythread1 implements runnable

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

    private  int ticket=10;

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

        for(int i=0;i<500;i++)

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

            if(this.ticket>0)

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

                system.out.println("卖票----->"+(this.ticket--));

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

            }

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

public class demo2 

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

           mythread1 mt=new mythread1();

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

        thread t1=new thread(mt);

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

        thread t2=new thread(mt);

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

        thread t3=new thread(mt);

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

        t1.start();

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

        t2.start();

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

        t3.start();

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

程序运行结果:

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

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

打赏

<b></b>赞

<b></b>收藏

<b></b>评论

分享

微博

qq

微信

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

举报

上一篇:简单应用小程序(类与类之间的关系调用)

下一篇:用多线程模拟生产零件系统程序

java实现多线程的两种方式比较及区别,线程编程的两种方法,python实现奖金计算两种方法的比较,(转载)java云计算两种方法的比较,java多线程实现的两种方式,java 多线程的两种方法,java中实现多线程般使用两种方法,java创建线程的两种方法,java创建进程的两种方法,java声明变量的两种方法