多线程模拟卖票
模拟情形
一个线程代表一个窗口,总共100张票,三个线程同时卖票并显示该线程剩余票数
实现
使用synchronized
同步锁:一个线程访问一个对象中的synchronized(this)
同步代码块时,其他试图访问该对象的线程将被阻塞。
进程同步:同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。
各个进程会抢占cpu的使用权,出现bug,这个时候需要使用锁来实现对一个线程的使用权的保护。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package 多线程.卖票;
public class SellTicket implements Runnable { private int tickets=100; @Override public void run() { // TODO Auto-generated method stub while(true) { synchronized (obj) { if(tickets>0) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"正在售票还有"+tickets+"张"); tickets--; } } }
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package 多线程.卖票;
public class SellTicketDemo {
public static void main(String[] args) { // TODO Auto-generated method stub SellTicket st=new SellTicket(); Thread t1=new Thread(st,"窗口1"); Thread t2=new Thread(st,"窗口2"); Thread t3=new Thread(st,"窗口3"); t1.setPriority(10); t1.start(); t2.start(); t3.start(); System.out.println("t1的优先级"+t1.getPriority()); System.out.println("t2的优先级"+t2.getPriority()); System.out.println("t3的优先级"+t3.getPriority()); }
}
|
还存在的问题
1.如果没有设置进程休眠时间,出现同时争抢1张票,并且没有顺序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| t1的优先级5 t2的优先级5 t3的优先级5 窗口2正在售票还有100张 窗口1正在售票还有100张 窗口3正在售票还有100张 窗口1正在售票还有98张 窗口2正在售票还有99张 窗口2正在售票还有95张 窗口1正在售票还有96张 窗口3正在售票还有97张 窗口1正在售票还有93张 窗口2正在售票还有94张 窗口1正在售票还有91张 窗口3正在售票还有92张 窗口1正在售票还有89张 窗口2正在售票还有90张 窗口1正在售票还有87张 窗口3正在售票还有88张 窗口1正在售票还有85张 窗口2正在售票还有86张 窗口1正在售票还有83张 窗口3正在售票还有84张 窗口1正在售票还有81张 窗口2正在售票还有82张 窗口1正在售票还有79张 窗口3正在售票还有80张 窗口1正在售票还有77张 窗口2正在售票还有78张 窗口1正在售票还有75张 窗口3正在售票还有76张 窗口1正在售票还有73张 窗口2正在售票还有74张 窗口1正在售票还有71张 窗口3正在售票还有72张 窗口1正在售票还有69张 窗口2正在售票还有70张 窗口1正在售票还有67张 窗口3正在售票还有68张 窗口1正在售票还有65张 窗口2正在售票还有66张 窗口1正在售票还有63张 窗口3正在售票还有64张 窗口1正在售票还有61张 窗口2正在售票还有62张 窗口1正在售票还有59张 窗口3正在售票还有60张 窗口1正在售票还有57张 窗口2正在售票还有58张 窗口1正在售票还有55张 窗口3正在售票还有56张 窗口1正在售票还有53张 窗口2正在售票还有54张 窗口1正在售票还有51张 窗口3正在售票还有52张 窗口1正在售票还有49张 窗口2正在售票还有50张 窗口1正在售票还有47张 窗口3正在售票还有48张 窗口1正在售票还有45张 窗口2正在售票还有46张 窗口1正在售票还有43张 窗口3正在售票还有44张 窗口1正在售票还有41张 窗口2正在售票还有42张 窗口2正在售票还有38张 窗口1正在售票还有39张 窗口3正在售票还有40张 窗口1正在售票还有36张 窗口2正在售票还有37张 窗口2正在售票还有33张 窗口1正在售票还有34张 窗口3正在售票还有35张 窗口3正在售票还有30张 窗口1正在售票还有31张 窗口2正在售票还有32张 窗口1正在售票还有28张 窗口3正在售票还有29张 窗口1正在售票还有26张 窗口2正在售票还有27张 窗口1正在售票还有24张 窗口3正在售票还有25张 窗口1正在售票还有22张 窗口2正在售票还有23张 窗口1正在售票还有20张 窗口3正在售票还有21张 窗口1正在售票还有18张 窗口2正在售票还有19张 窗口1正在售票还有16张 窗口3正在售票还有17张 窗口1正在售票还有14张 窗口2正在售票还有15张 窗口1正在售票还有12张 窗口1正在售票还有10张 窗口1正在售票还有9张 窗口3正在售票还有13张 窗口1正在售票还有8张 窗口2正在售票还有11张 窗口1正在售票还有6张 窗口3正在售票还有7张 窗口1正在售票还有4张 窗口2正在售票还有5张 窗口1正在售票还有2张 窗口3正在售票还有3张 窗口2正在售票还有1张
|
2.如果设置了休眠时间,有序但是会出现-1现象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| t1的优先级5 t2的优先级5 t3的优先级5 窗口3正在售票还有100张 窗口2正在售票还有99张 窗口1正在售票还有98张 窗口2正在售票还有97张 窗口3正在售票还有96张 窗口1正在售票还有95张 窗口2正在售票还有94张 窗口1正在售票还有93张 窗口3正在售票还有92张 窗口1正在售票还有91张 窗口2正在售票还有91张 窗口3正在售票还有91张 窗口1正在售票还有88张 窗口3正在售票还有87张 窗口2正在售票还有86张 窗口1正在售票还有85张 窗口3正在售票还有84张 窗口2正在售票还有83张 窗口1正在售票还有82张 窗口3正在售票还有81张 窗口2正在售票还有80张 窗口2正在售票还有79张 窗口3正在售票还有78张 窗口1正在售票还有77张 窗口1正在售票还有76张 窗口3正在售票还有75张 窗口2正在售票还有74张 窗口2正在售票还有73张 窗口3正在售票还有72张 窗口1正在售票还有71张 窗口1正在售票还有70张 窗口3正在售票还有69张 窗口2正在售票还有68张 窗口2正在售票还有67张 窗口3正在售票还有66张 窗口1正在售票还有65张 窗口1正在售票还有64张 窗口3正在售票还有63张 窗口2正在售票还有62张 窗口1正在售票还有61张 窗口3正在售票还有60张 窗口2正在售票还有59张 窗口1正在售票还有58张 窗口3正在售票还有57张 窗口2正在售票还有56张 窗口1正在售票还有55张 窗口3正在售票还有54张 窗口2正在售票还有53张 窗口2正在售票还有52张 窗口3正在售票还有51张 窗口1正在售票还有50张 窗口1正在售票还有49张 窗口3正在售票还有48张 窗口2正在售票还有47张 窗口2正在售票还有46张 窗口3正在售票还有45张 窗口1正在售票还有44张 窗口1正在售票还有43张 窗口3正在售票还有42张 窗口2正在售票还有41张 窗口2正在售票还有40张 窗口3正在售票还有39张 窗口1正在售票还有39张 窗口2正在售票还有37张 窗口1正在售票还有36张 窗口3正在售票还有35张 窗口3正在售票还有34张 窗口1正在售票还有33张 窗口2正在售票还有32张 窗口2正在售票还有31张 窗口1正在售票还有30张 窗口3正在售票还有29张 窗口2正在售票还有28张 窗口1正在售票还有27张 窗口3正在售票还有26张 窗口2正在售票还有25张 窗口1正在售票还有24张 窗口3正在售票还有23张 窗口3正在售票还有22张 窗口1正在售票还有21张 窗口2正在售票还有20张 窗口3正在售票还有19张 窗口1正在售票还有18张 窗口2正在售票还有17张 窗口1正在售票还有16张 窗口3正在售票还有15张 窗口2正在售票还有14张 窗口1正在售票还有13张 窗口3正在售票还有12张 窗口2正在售票还有11张 窗口2正在售票还有10张 窗口3正在售票还有9张 窗口1正在售票还有8张 窗口2正在售票还有7张 窗口3正在售票还有6张 窗口1正在售票还有5张 窗口2正在售票还有4张 窗口1正在售票还有3张 窗口3正在售票还有2张 窗口2正在售票还有1张 窗口3正在售票还有0张 窗口1正在售票还有-1张
|
3.synchronized
使用范围:使用修饰一个代码块,写在循环外时则该循环只能由第一个线程一直执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| t1的优先级5 t2的优先级10 t3的优先级5 窗口2正在售票还有100张 窗口2正在售票还有99张 窗口2正在售票还有98张 窗口2正在售票还有97张 窗口2正在售票还有96张 窗口2正在售票还有95张 窗口2正在售票还有94张 窗口2正在售票还有93张 窗口2正在售票还有92张 窗口2正在售票还有91张 窗口2正在售票还有90张 窗口2正在售票还有89张 窗口2正在售票还有88张 窗口2正在售票还有87张 窗口2正在售票还有86张 窗口2正在售票还有85张 窗口2正在售票还有84张 窗口2正在售票还有83张 窗口2正在售票还有82张 窗口2正在售票还有81张 窗口2正在售票还有80张 窗口2正在售票还有79张 窗口2正在售票还有78张 窗口2正在售票还有77张 窗口2正在售票还有76张 窗口2正在售票还有75张 窗口2正在售票还有74张 窗口2正在售票还有73张 窗口2正在售票还有72张 窗口2正在售票还有71张 窗口2正在售票还有70张 窗口2正在售票还有69张 窗口2正在售票还有68张 窗口2正在售票还有67张 窗口2正在售票还有66张 窗口2正在售票还有65张 窗口2正在售票还有64张 窗口2正在售票还有63张 窗口2正在售票还有62张 窗口2正在售票还有61张 窗口2正在售票还有60张 窗口2正在售票还有59张 窗口2正在售票还有58张 窗口2正在售票还有57张 窗口2正在售票还有56张 窗口2正在售票还有55张 窗口2正在售票还有54张 窗口2正在售票还有53张 窗口2正在售票还有52张 窗口2正在售票还有51张 窗口2正在售票还有50张 窗口2正在售票还有49张 窗口2正在售票还有48张 窗口2正在售票还有47张 窗口2正在售票还有46张 窗口2正在售票还有45张 窗口2正在售票还有44张 窗口2正在售票还有43张 窗口2正在售票还有42张 窗口2正在售票还有41张 窗口2正在售票还有40张 窗口2正在售票还有39张 窗口2正在售票还有38张 窗口2正在售票还有37张 窗口2正在售票还有36张 窗口2正在售票还有35张 窗口2正在售票还有34张 窗口2正在售票还有33张 窗口2正在售票还有32张 窗口2正在售票还有31张 窗口2正在售票还有30张 窗口2正在售票还有29张 窗口2正在售票还有28张 窗口2正在售票还有27张 窗口2正在售票还有26张 窗口2正在售票还有25张 窗口2正在售票还有24张 窗口2正在售票还有23张 窗口2正在售票还有22张 窗口2正在售票还有21张 窗口2正在售票还有20张 窗口2正在售票还有19张 窗口2正在售票还有18张 窗口2正在售票还有17张 窗口2正在售票还有16张 窗口2正在售票还有15张 窗口2正在售票还有14张 窗口2正在售票还有13张 窗口2正在售票还有12张 窗口2正在售票还有11张 窗口2正在售票还有10张 窗口2正在售票还有9张 窗口2正在售票还有8张 窗口2正在售票还有7张 窗口2正在售票还有6张 窗口2正在售票还有5张 窗口2正在售票还有4张 窗口2正在售票还有3张 窗口2正在售票还有2张 窗口2正在售票还有1张
|