標籤:thread exception read isis 最新 bsp tar over color
volatile是一個弱同步機制關鍵字,只能實現同步機制中的可見功能,不能實現互斥訪問。用在變數的聲明上時,表示多個線程擷取此變數時,都是最新的資料(變數會自動更新最新資料)。
synchronized 是一個內建鎖,也就是java內部加鎖機制。用在方法上時,每個線程進入的時候,它會獲得方法所在的對象的鎖,離開方法後釋放對象鎖。
自訂定時任務
任務管理類
package com.effectJava.Chapter3;import java.util.concurrent.TimeUnit;public class ManagerTask { private static boolean isManagerTaskEnd; public synchronized static void setIsManagerTaskEnd(boolean flage) { isManagerTaskEnd = flage; } public synchronized static boolean isIsManagerTaskEnd() { return isManagerTaskEnd; }// private static mytimeTask timetask = new mytimeTask(); public static void main(String... args) throws Exception {// 開啟任務線程 new Thread(){ @Override public void run() { while (true){ if(isIsManagerTaskEnd()){//沒開啟任務線程 setIsManagerTaskEnd(false); new mytimeTask().start(); } } } }.start(); //開啟timetask任務 setIsManagerTaskEnd(true); TimeUnit.SECONDS.sleep(1); //關閉// setIsManagerTaskEnd(false); //關閉timetask mytimeTask.setFlagesTrue(true); TimeUnit.SECONDS.sleep(2); mytimeTask.setFlagesTrue(false); setIsManagerTaskEnd(true); }}
任務處理類
package com.effectJava.Chapter3;public class mytimeTask extends Thread{ private volatile static boolean flages ; private static int count; //設定可見度 public static boolean isFlages() { return flages; } public static void setFlagesTrue(boolean flage) { flages = flage; } @Override public void run() { while (!isFlages()) { System.out.println("執行任務"); //執行任務代碼 } } public synchronized static int reCount() { return count++; } public synchronized static int getCount() { return count; }}
java多線程實現定時器任務