方法一:用內部類作為執行緒,根據內部類可以訪問外部類的全部成員的特性將擁有共享資料的類定義為外部類的成員變數或方法中的區域性變數,**如下
public class multithread
}).start();
new thread(new runnable()
}).start(); }}
class sharedata
} public synchronized void decrement()
}}
方法二:將共享資料封裝到乙個物件,將這個物件傳遞給多個runnable物件,每個執行緒對共享資料的操作方法也分配到那個物件身上完成,這樣容易實現針對該資料進行的各個操作的互斥和通訊,**如下
public class multithread
}class myrunnable1 implements runnable
@override
public void run()
}class myrunnable2 implements runnable
@override
public void run()
}class sharedata
} public synchronized void decrement()
}}
方法三:將共享資料定義為主類的成員變數,將需要同步的方法定義為主類的成員方法,**如下
public class multithread
class dec implements runnable
} }class inc implements runnable
} }public synchronized void increment()
public synchronized void decrement()
}
多執行緒要訪問共享資料的方式
1.如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如 賣票系統 2.如果每個執行緒執行的 不同,這時候需要不同的runnable物件,有如下2種方式來實現這些runnable物件之間的資料共享 1 將共享資料封裝到另外乙個物件中,然後將這...
多個執行緒訪問共享物件和資料的方式
1.如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如,賣票系統就可以那麼做。2.如果每個執行緒執行的 不同,這時候就需要用不同的runnable物件,有如下兩種方式來實現這些runnable物件之間的資料共享 1 將共享資料封裝到另外乙個...
訪問共享的可變資料
對可變共享資料的訪問如果不能同步,可能會出現預料之外的結果。但是下面這個例子就很容易導致誤判,且很多帖子上的解釋不是那麼的準確。public class stopthread thread.start timeunit.seconds.sleep 1 stoprequested true 上面這個例...