1. 程式人生 > >同步函數死鎖現象

同步函數死鎖現象

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 void
run(){ 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中的同步機制解決了線程安全的問題,但同時也引發了死鎖現象

同步函數死鎖現象