Java线程总结

来源:互联网 发布:社会网络分析大数据 编辑:程序博客网 时间:2024/06/06 20:49

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接口的方式了。
原创粉丝点击