现在的位置: 首页 > 综合 > 正文

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

2017年11月19日 ⁄ 综合 ⁄ 共 1722字 ⁄ 字号 评论关闭

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() {
			@Override
			public 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() {
			@Override
			public 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;
		}
		@Override
		public 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;
		}
		@Override
		public 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+"张票!");
	}
	
}

抱歉!评论已关闭.