java多线程--买票(ticket)实验
来源:互联网 发布:水果竞猜网站源码 编辑:程序博客网 时间:2024/05/16 12:46
1.以继承Thread的方式:
package org.sh.diffdemo;public class MyThread extends Thread {private int ticket = 5;public void run(){for(int i =0;i<10;i++){if(this.ticket>0){System.out.println("买票:ticket="+this.ticket--);}}}}
package org.sh.diffdemo;public class ThreadTicket {public static void main(String[] args) {MyThread m1 = new MyThread();MyThread m2 = new MyThread();m1.start();m2.start();}}
发现结果买了十张票 但是只有五张票,没有达到共享资源的目的 ,下面使用实现Runnable接口
2.以实现Runnable的方式:
package org.sh.diffdemo1;public class MyThread implements Runnable {private int ticket = 5;public void run(){for(int i =0;i<10;i++){if(this.ticket>0){System.out.println("买票:ticket="+this.ticket--);}}}}
package org.sh.diffdemo1;public class ThreadTicket {public static void main(String[] args) {MyThread m1 = new MyThread();Thread t1 = new Thread(m1);Thread t2 = new Thread(m1);t1.start();t2.start();}}
虽然是两个线程但是还是只是买了五张票,达到了共享资源的目的了。
在程序中加入延迟:
package org.sh.syndemo; class MyThread implements Runnable {private int ticket = 5;public void run(){for(int i =0;i<10;i++){if(this.ticket>0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("买票:ticket="+this.ticket--);}}}}public class SynDemo01 {public static void main(String[] args) {MyThread m1 = new MyThread();Thread t1 = new Thread(m1);Thread t2 = new Thread(m1);t1.start();t2.start();}}
结果:
买票:ticket=5买票:ticket=5买票:ticket=4买票:ticket=4买票:ticket=3买票:ticket=2买票:ticket=1买票:ticket=0
相信这个结果 大家都知道原因 这里不解释了,对上面的代码进行同步即可
3.线程间的同步
package org.sh.syndemo; class MyThread implements Runnable {private int ticket = 5;public void run(){for(int i =0;i<10;i++){this.sale();}}public synchronized void sale(){if(this.ticket>0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("买票:ticket="+this.ticket--);}}}public class SynDemo01 {public static void main(String[] args) {MyThread m1 = new MyThread();Thread t1 = new Thread(m1);Thread t2 = new Thread(m1);t1.start();t2.start();}}
0 0
- java多线程--买票(ticket)实验
- 多线程买票拉-java
- java多线程买票,同步锁
- 多线程买票
- java 多线程 实现窗口买票功能
- java 多线程详解二 买票示例
- java 多线程详解二 买票示例
- Java多线程基础—买票案例
- 多线程实现买票功能
- 多线程-经典买票问题
- 多线程实例买票
- 简易多线程买票案例
- HDU-1133Buy the Ticket 卡特兰数买票问题
- HDU-1133Buy the Ticket 卡特兰数买票问题
- cocos2d-x多线程{买票啦}
- java 多线程实验
- java多线程简单实验
- Java多线程实验
- 多线程之线程常用操作方法
- 联通屏蔽80端口后利用NAT端口映射穿透解决WEB网站应用发布
- UVa 839 - Not so Mobile
- 希尔排序算法
- vim常用命令
- java多线程--买票(ticket)实验
- POJ 3076 数独DLX
- 清空界面控件值小技巧
- 拥有梦想的人不做选择题,他们只做证明题
- 电信屏蔽了80端口,利用80端口映射解决web网站应用发布问题
- 从零单排c++ primer(22)
- 微信公众平台开发入门--PHP,实现自动回复文本,图文,点击事件
- vSphere备份实践(一)——用赛门铁克备份还原vSphere中的虚拟机
- 创建型模式-工厂三姐妹