這篇博客主要是復習一下java中線程的同步與死鎖。
1.多線程共享數據
在多線程的操作中,多個線程有可能同時處理同一個資源,這就是多線程的共享數據
2.線程同步
解決數據共享問題,必須使用同步,**所謂同步就是指多個線程在同一個 時間段內只能有一個線程執行指定代碼,其他線程要等待此線程完成之后才可以繼續執行。**
線程進行同步,有以下兩種方法
(1)同步代碼塊
synchronized(要同步的對象) { 要同步的操作; }
(2)同步方法
public synchronized void method() { 要同步的操作; }
** * 多線程共享數據的安全問題,使用同步方式解決 * 1.同步代碼塊 * 2.同步方法 * 同步代碼會帶來性能降低的問題,提高數據的安全性 */public class ThreadDemo { public static void main(String args[]) { MyThread myThread=new MyThread(); //共享一個對象 Thread thread=new Thread(myThread,"小白"); Thread thread1=new Thread(myThread,"鳳鳳"); thread.start(); thread1.start(); }}class MyThread implements Runnable{ //在run()方法的外部創建標記對象 //同步標記對象,一個鎖,進門關鎖,出門開鎖 Object object =new Object(); @Override public void run() { doMethod(); //同步代碼塊 // synchronized (object) // { // System.out.3.同步準則當編寫synchronized塊時,有幾個簡單的準則在避免死鎖和性能危險的風險方面有很大的幫助
(1)使代碼塊保持簡短。把不隨線程變化的預處理和后處理移出synchronized塊。
(2)不要阻塞。如InputStream.read()
(3)在持有鎖的時候,不要對其它對象調用方法。
4.線程死鎖
過多的同步有可能出現死鎖,死鎖的操作一般是在程序運行的時候才有可能出現。
多線程中要進行資源的共享,就需要同步,但是同步過多,就可能造成死鎖
新聞熱點
疑難解答