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

本文提供了一份全面的IT资源下载清单,包括各种编程语言、开发工具、框架、库等,帮助IT程序员快速提升技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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+"张票!");
	}
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值