码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA随想:单一任务与多线程关系

时间:2019-08-15 21:18:33      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:nbsp   lock   rac   color   catch   使用   class   ted   inter   

参考车票窗口买票系统DAY17-190807

1.多个线程单一任务(每一个线程有且只有一个任务匹配)-假设一个车票系统里有三个车票窗口(一个窗口有50张车票,共有150张车票)分别单独各自卖票(只卖自己窗口的50张票)(相比2,均衡卖车票,各自卖票数概率相等)

2.一个任务多个线程(任务内可以多个线程互斥竞争掠夺资源)-假设一个车票系统(一个车票系统里共150张车票)有三个车票窗口共同互斥竞争卖车票(相比1,随机抢车票,各自卖票数概率不一定相等)

 

 1 public class Test1 {
 2     public static void main(String[] args) {
 3         // 假设我们要描述的是每一个线程单独分配一个任务,并行处理。那么使用继承Thread类做是实现
 4         // MyThread myThread1=new MyThread();
 5         // MyThread myThread2=new MyThread();
 6         // MyThread myThread3=new MyThread();
 7         //
 8         // myThread1.start();
 9         // myThread2.start();
10         // myThread3.start();
11         // 假设我们要描述的是一个任务多个线程共同竞争并行处理。那么使用实现Runnable接口
12         TicketWindows ticketWindows = new TicketWindows();
13         Thread thread1 = new Thread(ticketWindows, "窗口1");
14         Thread thread2 = new Thread(ticketWindows, "窗口2");
15         Thread thread3 = new Thread(ticketWindows, "窗口3");
16         thread1.start();
17         thread2.start();
18         thread3.start();
19 
20     }
21 }
public class TicketWindows implements Runnable {

    private Integer nums = 5000;

    @Override
    public void run() {
        // 1.synchronized修饰方法中,代表该方法同一时刻只能一个线程 进来
        // 2.synchronized代码块,synchronized锁住的对象必须是所有线程所共有
        // synchronized (Thread.currentThread().getName()) {
        // }
        while (nums > 0) {
            synchronized (this) {
                if (nums > 0) {
                    nums--;
                    System.out.println(Thread.currentThread().getName() + "卖了一张票。剩下" + nums + "张");
                }

            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

    // @Override
    // public void run() {
    // // TicketWindows.class获取TicketWindows.class文件
    // synchronized (TicketWindows.class) {
    // // 1.synchronized修饰方法中,代表该方法同一时刻只能一个线程 进来
    // // 2.synchronized代码块,synchronized锁住的对象必须是所有线程所共有
    // // synchronized (Thread.currentThread().getName()) {
    // // }
    // while (nums > 0) {
    // nums--;
    // System.out.println(Thread.currentThread().getName() + "卖了一张票。剩下" + nums +
    // "张");
    // }
    // }
    // }

}

 

JAVA随想:单一任务与多线程关系

标签:nbsp   lock   rac   color   catch   使用   class   ted   inter   

原文地址:https://www.cnblogs.com/kzf3406/p/11360460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!