java线程同步简单例子

同步:

1、同步代码块

在代码块上加上“synchronized”关键字,代码块就称为代码块
2、同步代码块格式:
synchronized(同步对象){
需要同步的代码块;
}
3、同步方法
除了代码块可以同步,方法也可以
4、同步方法格式:
synchronized void 方法名(){
需要同步的代码块;

}

给出例子,动车票售票时可以在多个窗口进行购票操作,而若出现同事购票后而产生票数剩余量<0(出现没有座位)

<span style="color:#ff6600;">使用同步代码块:</span>
package com.demo;

public class ThreadDemo implements Runnable{

	/**
	 * @author 老辉辉
	 */
	private int ticket = 5;//假设有五张车票
	
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			synchronized (this) {
				if(ticket > 0){
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("剩余车票:" + ticket--);
				}
			}
		}
	}
}
class test {
	
	public static void main(String[] args) {
		ThreadDemo mythead = new ThreadDemo();
		//有三个售票窗口同时售票
		Thread t1 = new Thread(mythead);
		Thread t2 = new Thread(mythead);
		Thread t3 = new Thread(mythead);
		
		t1.start();
		t2.start();
		t3.start();
	}
}
<span style="color:#ff6600;">使用同步方法:(test类一样就可以)</span>
public class ThreadDemo implements Runnable{

	/**
	 * @author 老辉辉
	 */
	private int ticket = 5;//假设有五张车票
	
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			tell();
		}
	}
	public synchronized void tell(){
		if(ticket > 0){
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("剩余车票:" + ticket--);
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值