###24.09_多執行緒(獲取名字和設定名字)(掌握)
* 1.獲取名字
* 通過getname()方法獲取執行緒物件的名字
* 2.設定名字
* 通過建構函式可以傳入string型別的名字
* new thread("***")
}}.start();
new thread("yyy")
}}.start();
* 通過setname(string)方法可以設定執行緒物件的名字
* thread t1 = new thread() }};
thread t2 = new thread() }};
t1.setname("芙蓉姐姐");
t2.setname("小姐姐");
t1.start();
t2.start();
###24.10_多執行緒(獲取當前執行緒的物件)(掌握)
* thread.currentthread(), 主線程也可以獲取
* new thread(new runnable()
}}).start();
new thread(new runnable()
}}).start();
thread.currentthread().setname("我是主線程"); //獲取主函式執行緒的引用,並改名字
system.out.println(thread.currentthread().getname()); //獲取主函式執行緒的引用,並獲取名字
###24.11_多執行緒(休眠執行緒)(掌握)
* thread.sleep(毫秒,納秒), 控制當前執行緒休眠若干毫秒1秒= 1000毫秒 1秒 = 1000 * 1000 * 1000納秒 1000000000
new thread() catch (interruptedexception e) }}
}.start();
new thread() catch (interruptedexception e) }}
}.start();
###24.12_多執行緒(守護執行緒)(掌握)
* setdaemon(), 設定乙個執行緒為守護執行緒, 該執行緒不會單獨執行, 當其他非守護執行緒都執行結束後, 自動退出
* thread t1 = new thread() catch (interruptedexception e) }}
};thread t2 = new thread() catch (interruptedexception e) }}
};t1.setdaemon(true); //將t1設定為守護執行緒
t1.start();
t2.start();
###24.13_多執行緒(加入執行緒)(掌握)
* join(), 當前執行緒暫停, 等待指定的執行緒執行結束後, 當前執行緒再繼續
* join(int), 可以等待指定的毫秒之後繼續
* final thread t1 = new thread() catch (interruptedexception e) }}
};thread t2 = new thread() catch (interruptedexception e)
}system.out.println(getname() + "...bb");}}
};t1.start();
t2.start();
###24.14_多執行緒(禮讓執行緒)(了解)
* yield讓出cpu
###24.15_多執行緒(設定執行緒的優先順序)(了解)
* setpriority()設定執行緒的優先順序
###24.16_多執行緒(同步**塊)(掌握)
* 1.什麼情況下需要同步
* 當多執行緒併發, 有多段**同時執行時, 我們希望某一段**執行的過程中cpu不要切換到其他執行緒工作. 這時就需要同步.
* 如果兩段**是同步的, 那麼同一時間只能執行一段, 在一段**沒執行結束之前, 不會執行另外一段**.
* 2.同步**塊
* 使用synchronized關鍵字加上乙個鎖物件來定義一段**, 這就叫同步**塊
* 多個同步**塊如果使用相同的鎖物件, 那麼他們就是同步的
class printer
}public static void print2() }}
###24.17_多執行緒(同步方法)(掌握)
* 使用synchronized關鍵字修飾乙個方法, 該方法中所有的**都是同步的
class printer }/*
* 非靜態同步函式的鎖是:this
* 靜態的同步函式的鎖是:位元組碼物件
*/public static synchronized void print2()
}
package com.wuzhenjia.thread;
public class demo5_thread
class mysync extends thread catch (interruptedexception e) }}
} }class mysync2 implements runnable catch (interruptedexception e) }}
} } /**
* @param args
*/public static void main(string args)
}
###24.18_多執行緒(執行緒安全問題)(掌握)
* 多執行緒併發操作同一資料時, 就有可能出現執行緒安全問題
* 使用同步技術可以解決這種問題, 把運算元據的**進行同步, 不要多個執行緒一起操作
public class demo2_synchronized
}class ticketsseller extends thread
public ticketsseller(string name)
public void run() catch (interruptedexception e)
system.out.println(getname() + "...這是第" + tickets-- + "號票");}}
}}###24.19_多執行緒(火車站賣票的例子用實現runnable介面)(掌握)
###24.20_多執行緒(死鎖)(了解)
* 多執行緒同步的時候, 如果同步**巢狀, 使用相同鎖, 就有可能出現死鎖
* 盡量不要巢狀使用
private static string s1 = "筷子左";
private static string s2 = "筷子右";
public static void main(string args) }}
}}.start();
new thread() }}
}}.start();
}###24.21_多執行緒(以前的執行緒安全的類回顧)(掌握)
* a:回顧以前說過的執行緒安全問題
* 看原始碼:vector,stringbuffer,hashtable,collections.synchroinzed(***)
* vector是執行緒安全的,arraylist是執行緒不安全的
* stringbuffer是執行緒安全的,stringbuilder是執行緒不安全的
* hashtable是執行緒安全的,hashmap是執行緒不安全的
Java多執行緒中線程安全與鎖問題
無狀態的物件一定是執行緒安全的。要保持狀態的一致性,就需要在單個原子操作中更新所有相關的狀態變數。併發環境中的原子性與事務應用程式中的原子性有著相同的含義 一組語句作為乙個不可分割的單元被執行。對於可能被多個執行緒同時訪問的可變狀態變數,在訪問它的時候需要持有同一把鎖,在這種情況下,稱狀態變數是由這...
JAVA中線程同步方法
在這裡看到的 1 wait方法 該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分 塊 的執行緒停止執行,並釋放當前獲得的呼叫wait所在的 塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態 一旦獲得鎖就恢復執行 呼叫wait方法需要...
Java中線程應用總結
1.執行緒是基本排程單元。共享程序的資源,如記憶體和檔案控制代碼。但有自己的pc 程式計數器 stack 執行緒棧 及本地變數 2.執行緒的優勢 a 充分利用多處理器 b 可以簡化模型。特定任務給特定執行緒。如servlets及rmi等框架。c 對非同步事件的簡單處理。如socket,nio使用更複...