java线程几种实现_java多线程有几种实现方法,都是什么?

转自:http://www.cnblogs.com/liujichang/p/3150387.html

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方法有两种,分别是synchronized,wait与notify

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

java实现多线程有两种方法

1、继承Thread类

2、实现Runnable接口

这两种方法的共同点:

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

两种方法的不同点:

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

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

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

1 packagecn.itcast.demo1;2

3 public class MyThread extendsThread {4 privateString name;5 publicMyThread(String name){6 this.name =name;7 }8 //如果要使用多线程,则必须有一个方法的主体

9 public voidrun(){10 //打印输出

11 for(int i = 0;i < 10; i++){12 System.out.println(this.name + "----->运行");13 }14 }15

16 }

1 packagecn.itcast.demo1;2

3 public classDemo5 {4 public static voidmain(String[] args) {5 Runnable r1 = new MyThread("线程一");6 Runnable r2 = new MyThread("线程二");7 Runnable r3 = new MyThread("线程三");8

9 Thread t1 = newThread(r1);10 Thread t2 = newThread(r2);11 Thread t3 = newThread(r3);12

13 t1.start();14 t2.start();15 t3.start();16

17 }18

19

20 }

1 packagecn.itcast.demo1;2

3 public classDemo6 {4

5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub

7 MyThread mt1 = new MyThread("线程A");8 MyThread mt2 = new MyThread("线程B");9 MyThread mt3 = new MyThread("线程C");10

11 mt1.start();12 mt2.start();13 mt3.start();14

15 }16

17 }

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

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

程序2:

1 packagecn.itcast.demo1;2

3 public class MyThread1 implementsRunnable {4 private int ticket = 10;5

6 @Override7 public voidrun() {8 //TODO Auto-generated method stub

9 for(int i = 0; i < 500;i++){10 if(this.ticket > 0){11 System.out.println("卖票------》" + (this.ticket--));12 }13 }14

15 }16

17 }

1 packagecn.itcast.demo1;2

3 public classDemo7 {4

5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub

7 MyThread1 mt = newMyThread1();8 Thread t1 = newThread(mt);9 Thread t2 = newThread(mt);10 Thread t3 = newThread(mt);11

12 t1.start();13 t2.start();14 t3.start();15

16

17 }18

19 }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值