您的位置:首页 > 编程语言 > Java开发

Java线程总结

2017-10-22 11:27 155 查看

java多线程的实现方式

继承Thread类,重写run方法实现多线程操作

实现Runnable接口,重写run方法

借鉴个被用到烂的栗子

在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程。当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下这两种方式实现的两种结果。

继承Thread方式

class ThreadTest extends Thread {

private int    ticket = 10;
private String name;

public ThreadTest(String name){
this.name = name;
}

public void run() {
while (true) {
if (this.ticket > 0) {
System.out.println(Thread.currentThread().getName() + "卖票---->" + (ticket--));
}
}
}

public static void main(String[] args) {
ThreadTest tt1 = new ThreadTest("一号窗口");
ThreadTest tt2 = new ThreadTest("二号窗口");
ThreadTest tt3 = new ThreadTest("三号窗口");
tt1.start();
tt2.start();
tt3.start();
}

}

一号窗口卖票---->10
三号窗口卖票---->10
三号窗口卖票---->9
二号窗口卖票---->10
三号窗口卖票---->8
一号窗口卖票---->9
三号窗口卖票---->7
三号窗口卖票---->6
二号窗口卖票---->9
三号窗口卖票---->5
一号窗口卖票---->8
三号窗口卖票---->4
二号窗口卖票---->8
三号窗口卖票---->3
一号窗口卖票---->7
三号窗口卖票---->2
二号窗口卖票---->7
三号窗口卖票---->1
一号窗口卖票---->6
二号窗口卖票---->6
一号窗口卖票---->5
一号窗口卖票---->4
二号窗口卖票---->5
一号窗口卖票---->3
二号窗口卖票---->4
一号窗口卖票---->2
二号窗口卖票---->3
一号窗口卖票---->1
二号窗口卖票---->2
二号窗口卖票---->1


实现Runnable接口方式

public class RunnableTest implements Runnable {

private int ticket = 10;

@Override
public void run() {
while (true) {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + " is selling" + ticket--);
} else {
break;
}
}
}

public static void main(String[] args) {
RunnableTest rt = new RunnableTest();
new Thread(rt, "一号窗口").start();
new Thread(rt, "二号窗口").start();
new Thread(rt, "三号窗口").start();
}
}
一号窗口卖票---->10
三号窗口卖票---->8
二号窗口卖票---->9
三号窗口卖票---->6
一号窗口卖票---->7
三号窗口卖票---->4
二号窗口卖票---->5
三号窗口卖票---->2
一号窗口卖票---->3
二号窗口卖票---->1


使用实现Runnable方式优点

适合多个相同类或相同对象的线程去操作统一资源,把线程和程序的代码完美的分离开来,较好地体现了面向对象的设计思想。

有效避免Java的单继承特性带来的局限由,我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,这个类就只能采用实现Runnable接口的方式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 线程 Thread Runnable