執行緒高階操作筆記和練習

2021-07-09 03:42:30 字數 2340 閱讀 1941

練習:主線程,子執行緒互相互動:

package cn.itcast.thread;

public class testsubmainthread

}}).start();

for (int i = 0; i < 20; i++)

}private static void business() catch (interruptedexception e)

for (int j = 0; j < 50; j++)

flag = !flag;

testsubmainthread.class.notify();}}

}}).start();

for (int i = 0; i < 20; i++) catch (interruptedexception e)

}for (int j = 0; j < 10; j++)

flag = !flag;

testsubmainthread.class.notify();}}

}}package cn.itcast.thread;

public class business catch (interruptedexception e)

}for (int j = 0; j < 50; j++)

flag = !flag;

this.notify();

}public synchronized void main(int i) catch (interruptedexception e)

}for (int j = 0; j < 10; j++)

flag = !flag;

this.notify();}}

這個代 是自己寫的,心得體會:
執行緒的啟動和執行緒需要執行的代 應該要進行分離,同時如果需要被執行緒執行的代 要解決安全問題,我們應該在內部解決,也就是當成乙個業務來做,使用者只要直接使用,即使在多執行緒情況也不會出現安全問題,這充分體現了物件導向的封裝性,也即軟體工程思想的高類聚思想;
這個練 主要是要求我們對執行緒的通訊機制有乙個比較透徹的了解,等待喚醒機制,注意到什麼時候該等待,什麼時候該改變 記,什麼時候該喚醒對方。
執行緒範圍的資料:threadlocal,該類的底層實現原理是,有乙個map集合,用於儲存資料,以thread物件為關鍵字,以資料為value;
此設定時只要設定資料即可,即threadlocal.set(data);//將資料繫結到執行緒上;
取出操作threadlocal.get();//取出當前執行緒繫結的資料;
據這個思路我們想,我們是否可以設計出乙個跟當前執行緒相關的例項物件,在該例項物件中儲存資料,取出資料;
這個我們可以從單例設計模式中的懶漢式中得到啟發;
判斷某個執行緒上是否存在資料(例項物件);如果有怎返回這個例項物件,我們得到了繫結到某個執行緒的例項物件,用該物件進行訪問資料的操作;如果返回的是空,那麼我們就建立乙個例項物件,然後繫結到某個執行緒;當然依 的是threadlocal物件;
代 如下:

用物件導向的思想來看,這種設計體現了封裝性,使用者使用時直接就可以獲取到和執行緒繫結的例項物件;

struts2就是 據這個原理來解決執行緒安全問題的,他針對每乙個請求都建立乙個action,將所有和該請求相關的資料和物件封裝到乙個action中,然後將這個action繫結到當前執行緒;請求一結束就摧毀;
package cn.itcast.threadlocal;
public class threadlocalinstance
private final static threadlocal map = new threadlocal();

private static threadlocalinstance instance = null;

public static threadlocalinstance getinstance() 

return instance;

}

public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
}

actioncontext類的設計就是這樣滴;

同時我們應該清楚threadlocal並不是真正的解決了執行緒安全問題,只是他給每個執行緒都copy乙個共享資料的副本;

因此類似於單執行緒;

vi 操作筆記

1.關於退出 wq 強制儲存退出 wq 儲存退出 x 作用和 wq 一樣 zz 作用和 wq一樣,注意z是大寫的,並且不是在命令模式 q 退出 q 強制退出 2.關於移動 h 在當前行向左移動乙個字元 j 移動到下一行 k 移動到上一行 l 在當前行向右移動乙個字元 ctrl f 向前滾動一頁 ct...

mysql操作筆記

user01只能本地訪問 create user user01 localhost identified by password1 user02可以遠端訪問 create user user02 identified by password1 建立資料庫 create database db01 修...

mysql操作筆記

一 select user 顯示的為當前使用的 user 及host use mysql select distinct user from user 顯示該資料庫授權登陸的使用者名稱 其實還有 host 的限制 mysql 中新增使用者 新建資料庫 使用者授權 刪除使用者 修改密碼 注意每行後邊都...