14.1 线程回顾和同步函数
生活随笔
收集整理的這篇文章主要介紹了
14.1 线程回顾和同步函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package cn.chen.synchronizefunction;
/*
多線程:一個進程中有多個線程可以同時執行任務。多線程的好處:1.解決一個進程中可以同時執行多個任務的問題2.提高資源利用率多線程的弊端:1.增加了CPU的負擔2.降低了進程中線程的執行概率3.出現線程安全問題4.引發死鎖現象自定義線程的實現方式:方式一:1.自定義一個類繼承Thread類。2.重寫Thread類的run方法,把自定義線程的代碼寫再run方法上。3.創建Thread的子類對象,并調用start方法啟動線程。注意:1.不可直接調用run方法,否則就相當于直接調用基本方法。線程安全問題解決方法:方式一:同步代碼塊:同步代碼塊的格式:synchronize(鎖對象){需要被同步的代碼。}方式二:同步函數:同步函數就是使用synchronized修飾一個函數.同步函數注意事項:1.如果一個非靜態的同步函數的(鎖 --對象)是this對象,如果是靜態的同步函數(鎖---對象)是當前函數所屬的類字節碼文件(類.class)2.同步函數的鎖對象是固定的,不能由你來指定的推薦使用同步代碼塊:1.同步代碼塊的鎖對象可以由我們自己隨意指定,同步函數是固定的,不能由我們來指定。2.同步代碼塊可以很方便控制需要被同步代碼的范圍,同步函數必須是整個函數的所有代碼全部被同步了。案例:一個銀行賬戶5000,兩夫妻一人一個卡,取錢一次只能取出1000,要求線程安全。* */
class BankTHread extends Thread{static int count = 5000;public BankTHread(String name){super(name);}@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();getMoney();}//靜態函數public static synchronized void getMoney(){while(true){if(count > 0){System.out.println(Thread.currentThread().getName()+"取走了1000,還剩余 "+(count-1000));count = count - 1000;}else{System.out.println("余額0元");break;}}}}
public class Demo {public static void main(String[] args) {// TODO Auto-generated method stubBankTHread b1 = new BankTHread("老公");BankTHread b2 = new BankTHread("老婆");b1.start();b2.start();}}
總結
以上是生活随笔為你收集整理的14.1 线程回顾和同步函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13.8 线程的安全问题和解决方法
- 下一篇: 14.2线程死锁