java实现多线程有两种方法

来源:互联网 发布:网络安全法 专家解读 编辑:程序博客网 时间:2024/05/17 09:38

java实现多线程有两种方法
 
1、继承Thread类
 
2、实现Runnable接口
 

1)一般认为:实现Runnable接口的对象,其着眼点主要含义是:一个计算任务.它代表一个要被其它线程(如:线程池中的线程)执行的任务.着眼点是:交由其它人去完成的一个计算任务. ---对应着:要做的工作

2)一般认为:从Thread类继承的含义主要是:一个能执行其它(或自己)的任务的一个线程对象.着眼点是:线程的功能(通过继承来扩展执行其它计算任务的能力) ---对应着:做工作的工作人员

3)当然:若一个类已有父亲,不能再从Thread类继承,只好实现Runnable接口来达到线程的目的,这是一种选择了.


这两种方法的共同点:
 
不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。
 
两种方法的不同点:继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承
 

下面用例子来做说明
 
程序1:


 

 

程序的运行结果是:

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

 

 


 

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

程序2:

 

程序运行结果:

卖票----->10

卖票----->9

卖票----->8

卖票----->7

卖票----->6

卖票----->5

卖票----->4

卖票----->3

卖票----->2

卖票----->1

把以下代码稍稍改动一下:

 

程序运行结果发生了如下变化:

 

卖票----->7

卖票----->7

卖票----->7

卖票----->4

卖票----->4

卖票----->2

卖票----->1

卖票----->0

卖票----->0

卖票----->0

这就是所谓的线程不安全。。。
原创粉丝点击