同步函數死鎖現象
阿新 • • 發佈:2018-10-30
ket new 字節 類繼承 代碼 利用 繼承 else 兩個
多線程:一個進程中有多個線程可以同時執行任務
多線程的好處:
1、解決一個進程中可以同時執行多個任務的問題。
2、提高了資源利用率
多線程的弊端:
1、增加了CPU的負擔
2、降低了一個進程中線程的執行概率
3、出現了線程安全問題
4、會引發死鎖現象
自定義線程的實現方式:
方式一:
1、自定義一個類繼承Thread類。
2、重寫Thread類的run方法,把自定義線程的任務代碼寫在run方法上
3、創建Thread的子類對象,並且調用start方法啟動一個線程
線程安全問題出現的根本原因:
1、存在兩個或兩個以上的線程共享同一資源
2、多謝操作共享資源的代碼有多行
同步函數:使用synchronized修飾的函數
同步函數要註意的事項:
1、如果是一個非靜態的同步函數的鎖對象是this對象,如果是靜態的同步函數的鎖對象是當前函數所屬的類的字節碼文件(class對象)。
2、同步函數的鎖對象是固定的,不能由你來指定。
package com.longteng.lesson2; public class SaleTicket extends Thread { static int count = 5000; public SaleTicket(String name){ super(name); } @Override public synchronized voidrun(){ while(true){ if (count > 0) { count = count -1000; System.out.println (Thread.currentThread ().getName () + "取走了1000塊,還剩余" + count + "元"); } else { System.out.println ("取完了。。");break; } } } public static void main(String[] args) { SaleTicket thread1 = new SaleTicket ("老公"); SaleTicket thread2 = new SaleTicket ("老婆"); thread1.start (); thread2.start (); } }
老婆取走了1000塊,還剩余3000元
老婆取走了1000塊,還剩余2000元
老婆取走了1000塊,還剩余1000元
老婆取走了1000塊,還剩余0元
取完了。。
老公取走了1000塊,還剩余4000元
取完了。。
推薦使用同步代碼塊
1、同步代碼塊的鎖由我們隨意指定,方便控制,同步函數的鎖對象是固定的
2、同步代碼塊可以很方便控制需要被同步代碼的範圍,同步函數必須是整個函數的所有代碼都被同步
java中的同步機制解決了線程安全的問題,但同時也引發了死鎖現象
同步函數死鎖現象