Synchronized在多執行緒中的使用

2021-07-25 01:53:32 字數 2633 閱讀 8503

同步多執行緒:當兩個併發執行緒訪問同乙個物件object中的synchronized(this)同步**塊時,一段時間內只能有乙個執行緒被執行,另乙個必須等待當前執行緒執行完這個**塊以後才能執行改**。

class task

system.out.println("\nend task");}}

class

threada

extends

thread

@override

public

void run()

}

客戶端執行類
public

class syschronizedtest

}

執行結果

用同步**塊解決同步方法的弊端
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

}

第一次執行:

第二次執行:

總結:當乙個執行緒訪問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

}

執行結果:

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()

}

執行結果

驗證同步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...