Java class線程源代碼學(xué)習(xí)全過程
Java class線程需要我們不斷的學(xué)習(xí),在長(zhǎng)期的使用中會(huì)出現(xiàn)很多的問題,下面我們就從Java class線程的源代碼中看看如何才能更好的解決相關(guān)問題,希望大家有所收獲。
- class Test {
- public static void main(String[] args) {
- //定義Object對(duì)象o
- Object o = new Object();
- //定義Runclass對(duì)象r
- Runclass r = new Runclass();
- //注意這里,沒有將對(duì)象o和對(duì)象r的引用傳遞給兩個(gè)線程
- Thread1 t1 = new Thread1();
- Thread2 t2 = new Thread2();
- t1.start();
- t2.start();
- }
- }
問題:兩個(gè)線程類的成員變量沒有賦值方法,也沒有初始化,所以其引用為空,在調(diào)用時(shí)會(huì)拋出NullPointerException
解決:兩個(gè)線程類的構(gòu)造方法修改一下
- Thread1(Runclass r, Object o) {
- this.r = r;
- this.o = o;
- }
- Thread2(Runclass r, Object o) {
- this.r = r;
- this.o = o;
- }
- 調(diào)用方法變成:
- public static void main(String[] args) {
- Object o = new Object();
- Runclass r = new Runclass();
- Thread1 t1 = new Thread1(r, o);
- Thread2 t2 = new Thread2(r, o);
- t1.start();
- t2.start();
- }
這樣就解決了NullPointerException不過程序其他地方還有問題,程序會(huì)拋IllegalMonitorStateException這涉及到線程同步,樓主對(duì)wait的理解還不夠,可以看看相關(guān)資料。在這個(gè)程序中,需要將同步的地方改成o.wait();和o.notify();因?yàn)殒i定的對(duì)象是Object o。
【編輯推薦】