线程间共享数据例子--售票/退票

来源:互联网 发布:dnf银月技能数据 编辑:程序博客网 时间:2024/04/29 11:42

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!


例子程序:

package edu.review;import java.util.Random;/** * 题目要求: *   两个售票窗口,对某一趟列车票进行操作,一个为售票窗口,一个为退票窗口,每个窗口售/退票100张  **/public class Thread2ThreadDataShare {public static void main(String[] args) {// 方式1();//两种方式是等效的方式2();}public static void 方式1(){final DataShare data1 = new DataShare();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {Thread.sleep(new Random().nextInt(20));} catch (InterruptedException e) {e.printStackTrace();}data1.increment();}}}).start();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {Thread.sleep(new Random().nextInt(20));} catch (InterruptedException e) {e.printStackTrace();}data1.decrement();}}}).start();}public static void 方式2(){DataShare data2 = new DataShare();IncRunnable incRunnable = new IncRunnable(data2);DecRunnable decRunnable = new DecRunnable(data2);new Thread(incRunnable).start();new Thread(decRunnable).start();}static class IncRunnable implements Runnable{DataShare data = new DataShare();public IncRunnable(DataShare data){this.data = data;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {Thread.sleep(new Random().nextInt(20));} catch (InterruptedException e) {e.printStackTrace();}data.increment();}}}static class DecRunnable implements Runnable{DataShare data = new DataShare();public DecRunnable(DataShare data){this.data = data;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {Thread.sleep(new Random().nextInt(20));} catch (InterruptedException e) {e.printStackTrace();}data.decrement();}}}}class DataShare{private int ticket = 100;public synchronized void increment(){ticket++;System.out.println(Thread.currentThread().getName()+"退票,当前剩"+ticket+"张票!");}public synchronized void decrement(){ticket--;System.out.println(Thread.currentThread().getName()+"售票,当前剩"+ticket+"张票!");}}



原创粉丝点击