国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

? Java Java??? Java? ?? ? ???-??? ??? ???

Java? ?? ? ???-??? ??? ???

Feb 09, 2021 pm 05:43 PM
java ?? ?????

Java? ?? ? ???-??? ??? ???

?? ?? ????: java ?? ????

?? ?? ? ??? ??? ??

  • ?? ??? ??
  • ?? ??
  • ??? ? ???? ???
  • ??? ??? ? ??? ??
  • ??? ? ??? ??? ?? ??
  • ??? ?? ???? ?? ??

?? ??? ??

?? ??? ? ??:

/*
真正的多線程開發(fā),公司中的開發(fā),降低耦合性
線程就是一個(gè)單獨(dú)的資源類,沒有任何附屬的操作
1.屬性,方法
?*?*/public?class?SaleTicketDemo1?{
????public?static?void?main(String[]?args)?{
????????//并發(fā),多個(gè)線程操作同一個(gè)資源類,把資源類丟入線程
????????Ticket?ticket=new?Ticket();
????????//Runnable借口是一個(gè)FunationalInterface函數(shù)式接口,接口可以new,jdk1.8以后,lamda表達(dá)式()->{代碼}
????????new?Thread(()->{
????????????for(int?i=0;i{
????????????for(int?i=0;i0){
????????????System.out.println(Thread.currentThread().getName()+"賣出了"+(number--)+"票,剩余"+number);
????????}
????}}

? ?? ???? ???? ?????. ?? ???? ?? ??? ??? Java ?? - ?? ???

Java? ?? ? ???-??? ??? ???
? ?????. ?? ???? ???? ?? ???? ???? ???? ????. ?? ?????? ?? ? ?? ?? ????. ???? ??? ?? ??? ????. ? ??? ?? ???? ????? ?? ??? ???? ?? ? ????.

Lock

?? ????? JVM? ??? ?? ?? ???? ???? ?? ? ??? ???? ??? ? ??? ???? ?? ???? ???? ?????. jdk1.5 ?? JAVA??? ???? ??? ??? ???? ?? Lock ???? ???? ??? ? ??? ???? ?? Condition? ?????.

Lock ???? Java ????? ???? ???, ??? API? ?? Lock ???? ??? ??? ??? ????? ??????.


java.util.Concurrent ????? ??? ??(?? ??)? 3?? ?????? ????. ReadWriteLock
Lock ??? ???? ??? ? ?? ???? ?? ? ?? ??? ? ?? ??? ?? ??? ?????. ?? ??? ???? ???? ??? ?? ??? ?? ? ??? ?? ?? ?? ??? ??? ? ????.

Lock?l?=?...;?l.lock();?try?{?//?access?the?resource?protected?by?this?lock?}?finally?{?l.unlock();?}

lock()? ??? ????, Unlock()? ?? ??? ?????.

JDK ?? ??? ???? ????.

Java? ?? ? ???-??? ??? ??? ??? ?? ?? ???:
ReentrantLock ReentrantLock
ReentrantReadWriteLock.ReadLock ?? ?? ReentrantReadWriteLock . writeLock ?? ??

?? ReentrantLock ?? ???? ?? ???? ?????.

ReentrantLock ?? ?? ?? ???



??? ??: ?? ???? ??????. ??? ??? 3s? 3h ????? ???? 3h? ?? ??, ? ?? 3s? 3h? ????? ???, ?? ??? ?? ????. Java? ?? ? ???-??? ??? ??? ??? ??: ?? ?????? ?? ?? ???(???)
??? ??? ??? ???????.

?? ??, ?? ? ??, ?? ? ?? ??

//lock trilogy

//1.new ReentranLock() ??? //2.Lock.lock() lock
//3. finally(); Unlock

public?class?SaleTicketDemo2?{
	public?static?void?main(String[]?args)?{
		//并發(fā),多個(gè)線程操作同一個(gè)資源類,把資源類丟入線程
		Ticket?ticket=new?Ticket();
		//Runnable借口是一個(gè)FunationalInterface函數(shù)式接口,接口可以new,jdk1.8以后,lamda表達(dá)式()->{代碼}
		new?Thread(()->{for(int?i=0;i{for(int?i=0;i{for(int?i=0;i0){
				System.out.println(Thread.currentThread().getName()+"賣出了"+(number--)+"票,剩余"+number);
			}
		}?catch?(Exception?e)?{
			//?TODO:?handle?exception
		}finally{
			lock.unlock();
		}	
	}}

???? ??? ???

1. ???? ??? Java ????? ??? Java ??????

2. ???? ?? ??? ??? ? ????. ??? ?????? ?????

3. ???? ???? ??? ?????(a–). ??? ???? ???? ???! ??? ???? ??? ?? ??? ?????
4. ???? ??? 1(?? ??, ??), ??? 2(??, ???? ??)
lock.tryLock()? ??? ????? ????? ???? ?? ? ????. ???
5. ???? ??? ??, ???, ??? ??. ??, ??? ??, ?? ?? ??, ??/??? ?? ?? ??(?? ?? ??)
6. ???? ?? ?? ?? ??? ??? ????, ?? ??? ??? ?? ???? ?? ??? ??
???? ?? ?? ? ???? ?? ?? ??

???? ???? ??? ??

???? ???? ???? ?? ???? ??, ?? ??? ? ??? ???? ???? ?????.

??? ??? ??? ??? ??? ??? ?? ???? ?? ?? ??????.

??? ?? ???? ?? ??:
??? ?? + ?? ???? + ??? ??? + ?? ??
??? ??? ??? ??? ??

??? ? ?? ??: ????? ???? ???? ??? ??, ????? ??

??? A B? ??? ???? ??? ?? ??? ??=0 A num+1
B num-1

??:
?? ???? ?? ????? ?? + ???? + ??

package?testConcurrent;/*
線程之間的通信問題:生產(chǎn)者和消費(fèi)者問題????等待喚醒,通知喚醒
線程交替執(zhí)行?A?B?操作同一個(gè)變量number=0
A?num+1
B?num-1

?*?*/public?class?A?{
	public?static?void?main(String[]?args)?{
		Data?data?=new?Data();
		new?Thread(()->{
			for(int?i=0;i{
			for(int?i=0;i"+number);
		//通知其他線程,我+1完畢了
		this.notify();
	}
	//-1
	public?synchronized?void?decrement()?throws?InterruptedException{
		if(number==0){
			//等待
			this.wait();
		}
		number--;
		System.out.println(Thread.currentThread().getName()+"=>"+number);
		//通知其他線程,我-1完畢了
		this.notify();
	}}

? ???? ????. ??? ????? ??? ??? ??? ? ??? ??? ???? ? ? ? ???? ??? ??? ????.

		new?Thread(()->{
			for(int?i=0;i{
			for(int?i=0;i<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/052/4011c6e510a595c0afc39326e031cf33-4.png" class="lazy" alt="Java? ?? ? ???-??? ??? ???"><br> 這里結(jié)果中出現(xiàn)了2,輸出結(jié)果出現(xiàn)了問題。為什么呢?<br> 為什么if判斷會出現(xiàn)問題:<br> if判斷只判斷一次。因?yàn)閕f判斷了之后,就已經(jīng)進(jìn)入了代碼的等待那一行,這時(shí),在wait下的線程可能有多個(gè),甚至包括生產(chǎn)者和消費(fèi)者。有可能某個(gè)生產(chǎn)者執(zhí)行完了之后,喚醒的是另一個(gè)生產(chǎn)者。</p><p>在我們的官方文檔中就給出了解釋</p><pre class="brush:php;toolbar:false">public?final?void?wait(long?timeout)
????????????????throws?InterruptedException

導(dǎo)致當(dāng)前線程等待,直到另一個(gè)線程調(diào)用此對象的notify()方法或notifyAll()方法,或指定的時(shí)間已過。
線程也可以喚醒,而不會被通知,中斷或超時(shí),即所謂的虛假喚醒 。 雖然這在實(shí)踐中很少會發(fā)生,但應(yīng)用程序必須通過測試應(yīng)該使線程被喚醒的條件來防范,并且如果條件不滿足則繼續(xù)等待。 換句話說,等待應(yīng)該總是出現(xiàn)在循環(huán)中,就像這樣:

?synchronized?(obj)?{
?????????while?(<condition>)
?????????????obj.wait(timeout);
?????????...?//?Perform?action?appropriate?to?condition
?????}</condition>

注意點(diǎn):防止虛假喚醒問題
我們代碼中用的是if判斷,而應(yīng)該用while判斷

package?testConcurrent;/*
線程之間的通信問題:生產(chǎn)者和消費(fèi)者問題????等待喚醒,通知喚醒
線程交替執(zhí)行?A?B?操作同一個(gè)變量number=0
A?num+1
B?num-1

?*?*/public?class?A?{
????public?static?void?main(String[]?args)?{
????????Data?data?=new?Data();
????????new?Thread(()->{
????????????for(int?i=0;i{
????????????for(int?i=0;i{
????????????for(int?i=0;i{
????????????for(int?i=0;i"+number);
????????//通知其他線程,我+1完畢了
????????this.notify();
????}
????//-1
????public?synchronized?void?decrement()?throws?InterruptedException{
????????while(number==0){
????????????//等待
????????????this.wait();
????????}
????????number--;
????????System.out.println(Thread.currentThread().getName()+"=>"+number);
????????//通知其他線程,我-1完畢了
????????this.notify();
????}}

Lock版的生產(chǎn)者和消費(fèi)者問題

在synchronized版本中,我們使用了wait和notify來實(shí)現(xiàn)線程之間的同步
在lock中,
此時(shí)synchronized被lock替換了,那么wait和notify用什么來替換呢?
我們在官方文檔java.util.concurrent.locks 中,找到Lock類,然后在底部找到了
Condition newCondition()
返回一個(gè)新Condition綁定到該實(shí)例Lock實(shí)例。
在等待條件之前,鎖必須由當(dāng)前線程保持。 呼叫Condition.await()將在等待之前將原子釋放鎖,并在等待返回之前重新獲取鎖。

然后我們再來了解Condition類
Condition 將 Object 監(jiān)視器方法(wait、notify 和 notifyAll)分解成截然不同的對象,以便通過將這些對象與任意 Lock 實(shí)現(xiàn)組合使用,為每個(gè)對象提供多個(gè)等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和語句的使用,Condition 替代了 Object 監(jiān)視器方法的使用。
一個(gè)Condition實(shí)例本質(zhì)上綁定到一個(gè)鎖。 要獲得特定Condition實(shí)例的Condition實(shí)例,請使用其newCondition()方法。

Java? ?? ? ???-??? ??? ???
我們可以看到,使用的時(shí)候new一個(gè)Condition對象。然后用await替代wait,signal替換notify
代碼實(shí)現(xiàn)
//判斷等待+業(yè)務(wù)+通知

class?Data2{		//數(shù)字。資源類
	private?int?number=0;
	Lock?lock=new?ReentrantLock();
	Condition?condition=lock.newCondition();
	//+1
	public?void?increment()?throws?InterruptedException{
		try?{
			lock.lock();
			//業(yè)務(wù)代碼
			while(number!=0){		
				//等待
				condition.await();
			}
			number++;		
			System.out.println(Thread.currentThread().getName()+"=>"+number);
			condition.signalAll();		//通知
		}?catch?(Exception?e)?{
			//?TODO:?handle?exception
		}finally{
			lock.unlock();
		}
	}
	//-1
	public?void?decrement()?throws?InterruptedException{
		try?{
			lock.lock();
			//業(yè)務(wù)代碼
			while(number!=1){		
				//等待
				condition.await();
			}
			number--;		
			System.out.println(Thread.currentThread().getName()+"=>"+number);
			condition.signalAll();		//通知
		}?catch?(Exception?e)?{
			//?TODO:?handle?exception
		}finally{
			lock.unlock();
		}
	}	}

注意:主函數(shù)部分于最上面的代碼一樣。

Java? ?? ? ???-??? ??? ???
這時(shí)候雖然說是正確的,但是它是一個(gè)隨機(jī)分布的狀態(tài),現(xiàn)在我們希望它有序執(zhí)行,即A執(zhí)行完了執(zhí)行B,B執(zhí)行C,C完了執(zhí)行D。即精準(zhǔn)通知。

Condition實(shí)現(xiàn)精準(zhǔn)通知喚醒

Condition實(shí)現(xiàn)精準(zhǔn)的通知和喚醒
我們構(gòu)造三個(gè)線程,要求A執(zhí)行完了執(zhí)行B,B執(zhí)行完了執(zhí)行C,C執(zhí)行完了執(zhí)行D.
代碼思想:
//加多個(gè)監(jiān)視器,通過監(jiān)視器來判斷喚醒的是哪一個(gè)人
//設(shè)置多個(gè)同步監(jiān)視器,每個(gè)監(jiān)視器監(jiān)視一個(gè)線程
//實(shí)例:生產(chǎn)線,下單->支付->交易->物流

package?testConcurrent;import?java.util.concurrent.locks.Condition;import?java.util.concurrent.locks.Lock;import?java.util.concurrent.locks.ReentrantLock;/*
A執(zhí)行完調(diào)用B,B執(zhí)行完調(diào)用C,C執(zhí)行完調(diào)用A
?*?*/public?class?C?{

????public?static?void?main(String[]?args)?{
????????Data3?data=new?Data3();
????????new?Thread(()->{
????????????for(int?i=0;i{
????????????for(int?i=0;i{
????????????for(int?i=0;i支付->交易->物流
????private?Condition?condition1=lock.newCondition();
????private?Condition?condition2=lock.newCondition();
????private?Condition?condition3=lock.newCondition();
????private?int?number=1;???????//1A?2B?3C
????public?void?printA(){
????????lock.lock();
????????try?{
????????????//業(yè)務(wù),判斷->執(zhí)行->通知
????????????while(number!=1){
????????????????//等待
????????????????condition1.await();
????????????}
????????????System.out.println(Thread.currentThread().getName()+"=>AAAAAAA");
????????????//喚醒,喚醒指定的人,B
????????????number=2;???????????//精準(zhǔn)喚醒
????????????condition2.signal();
????????????
????????}?catch?(Exception?e)?{
????????????//?TODO:?handle?exception
????????}finally{
????????????lock.unlock();
????????}
????}???
????public?void?printB(){
????????lock.lock();
????????try?{
????????????//業(yè)務(wù),判斷->執(zhí)行->通知
????????????while(number!=2){
????????????????//等待
????????????????condition2.await();
????????????}
????????????System.out.println(Thread.currentThread().getName()+"=>BBBBBBB");
????????????//喚醒,喚醒指定的人,C
????????????number=3;???????????//精準(zhǔn)喚醒
????????????condition3.signal();
????????????
????????}?catch?(Exception?e)?{
????????????//?TODO:?handle?exception
????????}finally{
????????????lock.unlock();
????????}
????}
????public?void?printC(){
????????lock.lock();
????????try?{
????????????//業(yè)務(wù),判斷->執(zhí)行->通知
????????????while(number!=3){
????????????????//等待
????????????????condition3.await();
????????????}
????????????System.out.println(Thread.currentThread().getName()+"=>CCCCCCC");
????????????//喚醒,喚醒指定的人,A
????????????number=1;???????????//精準(zhǔn)喚醒
????????????condition1.signal();
????????????
????????}?catch?(Exception?e)?{
????????????//?TODO:?handle?exception
????????}finally{
????????????lock.unlock();
????????}
????}}

相關(guān)學(xué)習(xí)推薦:java基礎(chǔ)

? ??? Java? ?? ? ???-??? ??? ???? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1601
29
PHP ????
1502
276
???
JDBC? Java? ??? ???? ??? ?????? JDBC? Java? ??? ???? ??? ?????? Aug 02, 2025 pm 12:29 PM

JDBC ????? ???? ????? ?? ?? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? ?? ?? ??? ???????. 1. ????? ????? Conn.SetAutoCommit (False)?? ??????. 2. ??? ? ????? ?? ?? SQL ??? ?????. 3. ?? ??? ??? ?? Conn.commit ()?? ???? ??? ???? ???? ?? ??? ???? Conn.Rollback ()?? ??????. ???, ? ??? ???? ????, ??? ???? ????, ?? ??? ??? ?? ??? ??? ???? ? ???????. ?? ?? ?? ???? ????? ??? ???? ?? ?? ???? ???? ??? ????? ?? ??? ??? ? ?? ???? ?? ????.

Java? ??? ?? ??? ?????? Java? ??? ?? ??? ?????? Aug 02, 2025 am 02:38 AM

?? ?? ? ?? ???? ???? ?? Java.Time ???? ???? ??????. 2. LocalDate, LocalDateTime ? LocalTime? ?? ?? ??? ??? ?????. 3. () ???? ???? ?? ??? ??? ????. 4. ???/???? ??? ???? ??? ????? ??? ??????. 5. ZonedDateTime ? Zoneid? ???? ???? ??????. 6. DateTimeFormatter? ?? ?? ? ?? ?? ?? ???; 7. ??? ?? ?? ?? ??? ????? ?? ??????. ?? Java? ?? ??? ???? ??? ??? ???? Java.Timeapi ??? ?? ??? ???????.

Java ??? ?? ?? : Spring Boot vs Quarkus vs Micronaut Java ??? ?? ?? : Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

?? HTTP ???? ?? ??? ?????? ?? HTTP ???? ?? ??? ?????? Aug 03, 2025 am 11:35 AM

GO? HTTP ?? ????? ?? ??, ??, ????? IP ? ?? ??? ?? ? ? ????. 1. http.handlerfunc? ???? ????? ????, 2. ??? ???? ?? ?? ??? ?? ??? ??????. ?? ?? ??? ???? ??? ?????? ??? ????? ???? ? ?????. ?? ???? ?? ?? ??, JSON ?? ?? ? ?? ID ??? ?????.

??? ??? Java?? ??? ?????? ??? ??? Java?? ??? ?????? Aug 02, 2025 pm 01:55 PM

Java 's Garbage Collection (GC)? ???? ???? ???? ??????, ?? ? ??? ??? ? ??? ??? ??? ??? ????. 1.GC? ?? ?? (? : ?? ??, ?? ???, ?? ?? ?)?? ??? ???? ????, ?? ? ??? ??? ???? ?????. 2. ?? ???? ????? ????, ?? ?? ??? ??? ???? ?? ??? ??????. 3. ?? ?? ?? ?? : ??? ?? (Eden, S0, S1)? ?? ????? ?????. ??? ??? ?? ? MajorGC? ???? ? ??? ? ????. Metaspace? ??? ?? ???? ?????. 4. JVM? ??? GC ??? ?????. SerialGC? ??? ?? ????? ?????. ParallelGC? ???? ??????. CMS? ?? ???

??? ???? html` ?? '??? ????? ??? ???? html` ?? '??? ????? Aug 03, 2025 am 11:07 AM

??? htmlinput ??? ???? ??? ???? ????? ??? ??? ?? ??? ???? ???? ? ????. 1. ???, ???, ??, ?? ? ??? ?? ??? ??? ?? ?? ?? ??? ???? ???? ??? ? ???? ??? ? ????. 2. HTML5? ?????? ??? ? ?? ?? ??? ?? ? ??? URL, ??, ?? ? ??? ?? ??? ??? ??????. 3. ?? ?? ? ? ??? ??? ???? ?? ??? ???? ???? ?? ???? ?? ???? ???? ?? ? ? ??? ?? ???????.

Java ?? ?? ?? : Maven vs. Gradle Java ?? ?? ?? : Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

GradleisBetTerChoiceFormostNewProjectSduetoitssuperiorflexible, Performance, and ModernToolingsupport.1.Gradle'Sgroovy/kotlindslismoreConcisENDEXPRESSIVETHANMAVEN'SVOSEXML.2.GradleOutsMaveninbuildweedweedweedweedweedweedweedweedweedweedweedweedweedweede

??? ????. ?? ??? ?? ??? ????. ?? ??? ?? Aug 02, 2025 am 06:26 AM

DEFER? ??? ???? ?? ??? ??? ???? ? ?????. ?? ??? ?? ? ? ?? ????, ??? ??? ? ?? ?? (LIFO)? ??? ?????. 1. ?? ??? ??? ? ??? ?????. 2. ?? ??? ?? ??? ??? ????? ?????. 3. ?? ? ?? ?? ??? ? ????. 4. ??? ?????? ??? ??? ???? ?????. 5. ?? ??? ???? ?? ??? ?? ??? ?????. ??? ??? ?? ?? ? ???? ???? ? ????.

See all articles