第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

用于解決多線程安全問題的三種方式

標(biāo)簽:
Java 面試

用于解决多线程安全问题的方式:
1. 同步代码块 (隐式锁)
2. 同步方法(隐式锁)
3. 同步锁 Lock( jdk 1.5 后)
 注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁

下面举一个售票例子:

1)同步代码块

package com.lxj.juc;

public class TestSync {

	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		new Thread(ticket).start();
		new Thread(ticket).start();
		new Thread(ticket).start();
	}
	
}
class Ticket implements Runnable{

	private int ticket = 100;
	
	@Override
	public void run() {
		while(true) {
			synchronized(this) {  //this代表对当前对象上锁
				if(ticket > 0) {
					try {
						Thread.sleep(200);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+" : 购票成功,余票为:" +  --ticket );
				}else {
					break;
				}
			}
		}
	}
	
}

运行结果:
Thread-0 : 购票成功,余票为:99
Thread-0 : 购票成功,余票为:98
Thread-2 : 购票成功,余票为:97
.....
Thread-2 : 购票成功,余票为:7
Thread-0 : 购票成功,余票为:6
Thread-0 : 购票成功,余票为:5
Thread-1 : 购票成功,余票为:4
Thread-1 : 购票成功,余票为:3
Thread-0 : 购票成功,余票为:2
Thread-0 : 购票成功,余票为:1
Thread-2 : 购票成功,余票为:0

2)同步方法

package com.lxj.juc;

public class TestSync {

	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		new Thread(ticket).start();
		new Thread(ticket).start();
		new Thread(ticket).start();
	}

}

class Ticket implements Runnable {

	private int ticket = 100;

	@Override
	public void run() {
		while (true) {
			if (ticket > 0) {
				int i = purchase();
				if(i == 0) {
					break;
				}
			}else {
				break;
			}
		}
	}

	private synchronized int purchase() {
		if (ticket > 0) {
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + " : 购票成功,余票为:" + --ticket);
		}else {
			return 0;
		}
		return 1;
	}

}

运行结果:
Thread-0 : 购票成功,余票为:99
Thread-0 : 购票成功,余票为:98
Thread-0 : 购票成功,余票为:97
Thread-2 : 购票成功,余票为:96
Thread-1 : 购票成功,余票为:95
....
Thread-1 : 购票成功,余票为:8
Thread-2 : 购票成功,余票为:7
Thread-2 : 购票成功,余票为:6
Thread-0 : 购票成功,余票为:5
Thread-0 : 购票成功,余票为:4
Thread-0 : 购票成功,余票为:3
Thread-2 : 购票成功,余票为:2
Thread-1 : 购票成功,余票为:1
Thread-2 : 购票成功,余票为:0


3)同步锁lock

package com.lxj.juc;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class TestSync {

	public static void main(String[] args) {
		Ticket ticket = new Ticket();
		new Thread(ticket).start();
		new Thread(ticket).start();
		new Thread(ticket).start();
	}

}

class Ticket implements Runnable {

	private int ticket = 100;

    private Lock lock = new ReentrantLock();
	
	@Override
	public void run() {
		while (true) {
			lock.lock(); //上锁
			try {
				if (ticket > 0) {
					try {
						Thread.sleep(200);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + " : 购票成功,余票为:" + --ticket);
				}else {
					break;
				}
			} finally {
				lock.unlock(); //解锁
			}
		}
	}


}

运行结果:
Thread-0 : 购票成功,余票为:99
Thread-1 : 购票成功,余票为:98
Thread-1 : 购票成功,余票为:97
Thread-1 : 购票成功,余票为:96
Thread-1 : 购票成功,余票为:95
Thread-2 : 购票成功,余票为:94
......
Thread-0 : 购票成功,余票为:6
Thread-0 : 购票成功,余票为:5
Thread-1 : 购票成功,余票为:4
Thread-2 : 购票成功,余票为:3
Thread-2 : 购票成功,余票为:2
Thread-2 : 购票成功,余票为:1
Thread-2 : 购票成功,余票为:0

注意使用同步锁一定要记得关闭锁,放在try{}finally{}中。















點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消