java中線程問題

2021-09-25 03:15:56 字數 3700 閱讀 3524

###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使用更複...