多线程知识学习

来源:互联网 发布:c语言判断数字的位数 编辑:程序博客网 时间:2024/06/18 12:26

我们现在写一个买票的多线程。
例子:

public class SellTicket implements Runnable {    private Integer tickets = 50;    @Override    public void run() {        while (true){            if(tickets>0){                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                System.out.println( Thread.currentThread().getName() + " 正在销售第 " + tickets-- + " 张票" );            }        }    }}

下面我们通过三个线程来消耗这个买票的过程。

public class SellTicketDemo {    public static void main(String[] args) {        SellTicket target = new SellTicket();        Thread t1 = new Thread(target,"t1");        Thread t2 = new Thread(target,"t2");        Thread t3 = new Thread(target,"t3");        t1.start();        t2.start();        t3.start();    }}``控制台:![这里写图片描述](http://img.blog.csdn.net/20160629144934277)我们可以考虑使用同步方法还解决,这里我们使用锁来进一步控制。定义锁对象。示例代码:

public class SellTicket implements Runnable {

private Integer tickets = 50;private Lock lock = new ReentrantLock();@Overridepublic void run() {    while (true){        try {            lock.lock();            if(tickets>0){                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                System.out.println( Thread.currentThread().getName() + " 正在销售第 " + tickets-- + " 张票" );            }        }finally {            lock.unlock();        }    }}

}
“`

这下业务逻辑就正常实现了。
这里写图片描述

0 0
原创粉丝点击