同步多執行緒:當兩個併發執行緒訪問同乙個物件object中的synchronized(this)同步**塊時,一段時間內只能有乙個執行緒被執行,另乙個必須等待當前執行緒執行完這個**塊以後才能執行改**。
class task
system.out.println("\nend task");}}
class
threada
extends
thread
@override
public
void run()
}
客戶端執行類
public
class syschronizedtest
}
執行結果
![](https://pic.w3help.cc/98c/6282df46e7ebb843b7e5238bb4a85.jpeg)
用同步**塊解決同步方法的弊端
class taskproblem
system.out.println(getdata1);
system.out.println(getdata2);
system.out.println("end task");}}
class
threadproblem
extends
thread
@override
public
void run() catch (interruptedexception e) }}
public
class synchronizedtestproblem
}
第一次執行:
![](https://pic.w3help.cc/d10/106bc0ee1a82ca44ff9ba1aac2b1e.jpeg)
第二次執行:
![](https://pic.w3help.cc/a2a/bfb41b778ba1ecddcdd3e3a784496.jpeg)
總結:當乙個執行緒訪問object的乙個synchronized同步**塊時,另乙個執行緒仍然可以訪問該object物件的非synchronized(this)同步**塊。
一半非同步,一半同步
下面這個程式用來說明:不在synchronized塊中就是非同步執行,在synchronized塊中的就是同步執行
class taskasync
system.out.println("");
synchronized (this) }}
}
class
threadasync
extends
thread
@override
public
void run()
}
public
class synchronizedtestasync
}
執行結果:
![](https://pic.w3help.cc/427/f872fb8d9fd4d220fcc0116d11206.jpeg)
synchronized**塊之間的同步性在使用同步synchronized(this)**塊時需要注意的是,當乙個執行緒訪問object的乙個synchronized(this)同步**塊時,其他執行緒對同乙個object中所有其他synchronized(this)同步**塊的訪問將被阻塞,這說明synchronized使用的「物件監視器」是乙個。
class objectservice
}public
void
servicemethodb()}}
class
threadobjecta
extends
thread
@override
public
void run() catch (interruptedexception e)
}}class
threadobjectb
extends
thread
@override
public
void run()
}
執行結果
![](https://pic.w3help.cc/b8c/c822e1212b6fb5cefe13d25574a20.jpeg)
驗證同步synchronized(this)**塊是鎖定當前物件的和synchronized方法一樣,synchronized(this)**塊也是鎖定當前物件的。
CLLocationManager在多執行緒下使用
似乎定位的返回 呼叫 只能有主線程來呼叫,並且這個物件還必須是在主線程建立的。做過以下實驗 1.子執行緒中 self.locationmanager cllocationmanager alloc init autorelease locationmanager.delegate self loca...
在windows下配置pthread多執行緒
pthread是由posix提出的一套通用的執行緒庫,在linux平台下,它被廣泛的支援,而windows平台下,卻並不被支援,而pthreads w32為我們提供了解決方案,本文我們準備在我們的windows平台下進行pthread w32的安裝,在網路上有類似的文章,但是講的都是比較老的平台,在...
synchronized同步方法(菜鳥玩執行緒)
共享變數類package com.chapter02.thread1 public class hasselfprivatenum else system.out.println username num num catch interruptedexception e 自定義執行緒apackage...