现在的位置: 首页 > 综合 > 正文

java实现多线程有两种方法

2018年05月21日 ⁄ 综合 ⁄ 共 2404字 ⁄ 字号 评论关闭

 

java实现多线程有两种方法

1、继承Thread类

2、实现Runnable接口

这两种方法的共同点:

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

两种方法的不同点:

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

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

 

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

 

 

下面用例子来做说明

程序1:

程序的运行结果是: 
线程A----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程C----->运行、、、、
线程B----->运行、、、、
线程C----->运行、、、、
线程B----->运行、、、、
线程C----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程C----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程C----->运行、、、、
线程B----->运行、、、、
线程A----->运行、、、、
线程C----->运行、、、、
线程A----->运行、、、、
线程C----->运行、、、、
线程C----->运行、、、、
线程C----->运行、、、、

程序2: 

 

 

程序运行结果:

 

卖票----->10

卖票----->9

卖票----->8

卖票----->7

卖票----->6

卖票----->5

卖票----->4

卖票----->3

卖票----->2

卖票----->1

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

 

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

 

卖票----->7

卖票----->7

卖票----->7

卖票----->4

卖票----->4

卖票----->2

卖票----->1

卖票----->0

卖票----->0

卖票----->0

这就是所谓的线程不安全。。。

 

 

 

 

抱歉!评论已关闭.