當前位置:首頁 » 編程語言 » java線程通信

java線程通信

發布時間: 2022-09-06 14:58:15

java中怎麼實現兩個線程的信息傳遞

java兩個線程之間可以通過使用全局變數,然後使用set和get方法就可以傳遞變數,實例如下:

publicstaticStringpub="";
publicstaticvoidmain(String[]args){
finalThreadt2=newThread(){
@Override
publicvoidrun(){
//列印線程1傳遞過來的值
System.out.println(pub);
}
};
Threadt1=newThread(){
@Override
publicvoidrun(){
Stringthread1="thread1";
//將值thread1傳遞給線程2
pub=thread1;
t2.start();
}
};
t1.start();
}

Ⅱ java一個線程中開啟另一個線程如何通信

一個辦法,直接把set方法寫在run函數里,一個辦法直接運行run,不過這就不是線程了,一個辦法加鎖

Ⅲ java線程間通信有幾種方式

由於線程A和線程B持有同一個MyObject類的對象object,盡管這兩個線程需要調用不同的方法,但是它們是同步執行的,比如:線程B需要等待線程A執行完了methodA()方法之後,它才能執行methodB()方法。這樣,線程A和線程B就實現了 通信。

Ⅳ JAVA線程間通信的幾種方式

Java多線程間的通信

Java還提供了一種線程間通信的機制,這種通信通什麼實現?
wait,notify等機制
或使用pipeInputStream和pipeOutputStream

1. 線程的幾種狀態
線程有四種狀態,任何一個線程肯定處於這四種狀態中的一種:
1) 產生(New):線程對象已經產生,但尚未被啟動,所以無法執行。如通過new產生了一個線程對象後沒對它調用start()函數之前。
2) 可執行(Runnable):每個支持多線程的系統都有一個排程器,排程器會從線程池中選擇一個線程並啟動它。當一個線程處於可執行狀態時,表示它可能正處於線程池中等待排排程器啟動它;也可能它已正在執行。如執行了一個線程對象的start()方法後,線程就處於可執行狀態,但顯而易見的是此時線程不一定正在執行中。
3) 死亡(Dead):當一個線程正常結束,它便處於死亡狀態。如一個線程的run()函數執行完畢後線程就進入死亡狀態。
4) 停滯(Blocked):當一個線程處於停滯狀態時,系統排程器就會忽略它,不對它進行排程。

Ⅳ 如何將一個東西發送給多個人Java線程通信

傳統的進程間通信的方式有大致如下幾種:
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信號量(Semphore)
(4) 消息隊列(MessageQueue)
(5) 共享內存(SharedMemory)
(6) Socket
Java如何支持進程間通信。我們把Java進程理解為JVM進程。很明顯,傳統的這些大部分技術是無法被我們的應用程序利用了(這些進程間通信都是靠系統調用來實現的)。但是Java也有很多方法可以進行進程間通信的。
除了上面提到的Socket之外,當然首選的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通過內存映射文件來實現進程間通信(共享內存)。

Ⅵ java線程間通信問題

import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;

public class ThreadDemo {

/**
* Semaphore 就是大學操作系統裡面講的信號量, 其方法acquire和release分別對應PV操作
* AtomicInteger 是原子變數,對它的操作會轉化為底層的原語(不可分割的操作),這樣多線程並發對其操作就不會有問題,
* 如果是普通的int就還要加鎖才能保證沒問題
*/
public static void main(String[] args) throws InterruptedException {
// 用於啟動另一個線程
Semaphore startThread = new Semaphore(1);
// 用於控制終止程序
AtomicInteger threadCount = new AtomicInteger(0);

for (int i = 1; i <= 10; i++) {
CountThread t = new CountThread("Thread" + i, startThread,
threadCount);
t.start();
}
}
}

class CountThread extends Thread {
// 線程標識
private String label;
// 用於啟動另一個線程
private Semaphore startThread;
// 用於控制終止程序
private AtomicInteger threadCount;

public CountThread(String label, Semaphore startThread,
AtomicInteger threadCount) {
this.label = label;
this.startThread = startThread;
this.threadCount = threadCount;
}

public void run() {
try {
// 等待線程被喚醒
startThread.acquire();

System.out.println("------線程:" + label + " 開始工作------");
} catch (InterruptedException e) {
e.printStackTrace();
}

int num = 0;
while (true) {
System.out.println("線程:" + label + "計數:" + num);
// 計數到5
if (num++ == 5) {
// 喚醒另一個計數線程
startThread.release();
// 10的時候程序終止, incrementAndGet是遞增(也就是++操作), 再取值
if (threadCount.incrementAndGet() == 10) {
System.exit(1);
}
}
}
}
}

研究Java並發,強烈推薦你看《Java並發編程實踐》

Ⅶ Java線程之間如何通信

  • volatile修飾的變數具有可見性。可見性也就是說一旦某個線程修改了該被volatile修飾的變數,它會保證修改的值會立即被更新到主存,當有其他線程需要讀取時,可以立即獲取修改之後的值。在Java中為了加快程序的運行效率,對一些變數的操作通常是在該線程的寄存器或是CPU緩存上進行的,之後才會同步到主存中,而加了volatile修飾符的變數則是直接讀寫主存。

  • volatile禁止指令重排 ,指令重排是指處理器為了提高程序運行效率,可能會對輸入代碼進行優化,它不保證各個語句的執行順序同代碼中的順序一致,但是它會保證程序最終執行結果和代碼順序執行的結果是一致的。指令重排序不會影響單個線程的執行,但是會影響到線程並發執行的正確性。程序執行到volatile修飾變數的讀操作或者寫操作時,在其前面的操作肯定已經完成,且結果已經對後面的操作可見,在其後面的操作肯定還沒有進行。

  • synchronized可作用於一段代碼或方法,既可以保證可見性,又能夠保證原子性。可見性體現在:通過synchronized或者Lock能保證同一時刻只有一個線程獲取鎖然後執行同步代碼,並且在釋放鎖之前會將對變數的修改刷新到主存中。
    原子性表現在:要麼不執行,要麼執行到底。

  • 總結

  • 從而我們可以看出volatile雖然具有可見性但是並不能保證原子性。

  • 性能方面,synchronized關鍵字是防止多個線程同時執行一段代碼,就會影響程序執行效率,而volatile關鍵字在某些情況下性能要優於synchronized。

  • 但是要注意volatile關鍵字是無法替代synchronized關鍵字的,因為volatile關鍵字無法保證操作的原子性。

Ⅷ 雲南電腦培訓分享Java線程的知識要點

一、進程的概念

進程表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,並給它分配資源,包括內存空間、磁碟空間、I/O設備等。然後,把該進程放入就緒隊列。進程調度程序選中它,為它分配CPU以及其他有關的資源,該進程才真正運行。所以,雲南電腦培訓http://www.kmbdqn.com/發現進程是系統中的並發執行的單位。

二、線程的概念

線程:(英語:thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以並發多個線程,每條線程並行執行不同的任務。

三、引用線程的優勢

(1)易於調度。

(2)提高並發性。通過線程可方便有效地實現並發性。進程可創建多個線程來執行同一程序的不同部分或相同部分。

(3)開銷少。創建線程比創建進程要快,所需開銷很少。

(4)利於充分發揮多處理器的功能。通過創建多線程進程(即一個進程可具有兩個或更多個線程),每個線程在一個處理器上運行,從而實現應用程序的並發性,使每個處理器都得到充分運行。

四、進程與線程的關系

(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。

(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。

(3)處理機分給線程,即真正在處理機上運行的是線程。

(4)線程在執行過程中,要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。

簡單來說:

1、一個程序至少有一個進程,一個進程至少有一個線程。

2、進程在執行過程中擁有獨立的資源,而多個線程共享進程中的資源。


Ⅸ Java中線程間怎麼通訊什麼叫僵死線程

死鎖?兩個線程互相占著資源,其中一個sleep了就死那了

Ⅹ java中為什麼線程通信的方法wait(), notify()和notifyAll()被定義在Object類里

Java的每個對象中都有一個鎖(monitor,也可以成為監視器) 並且wait(),notify()等方法用於等待對象的鎖或者通知其他線程對象的監視器可用。在Java的線程中並沒有可供任何對象使用的鎖和同步器。
這就是為什麼這些方法是Object類的一部分,這樣Java的每一個類都有用於線程間通信的基本方法

熱點內容
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:778
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:100
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:208
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811
銀行支付密碼器怎麼用 發布:2024-09-08 06:39:52 瀏覽:513
蘋果手機清理瀏覽器緩存怎麼清理緩存 發布:2024-09-08 06:31:32 瀏覽:554
雲伺服器的優點與缺點 發布:2024-09-08 06:30:34 瀏覽:734
上傳下載賺錢 發布:2024-09-08 06:14:51 瀏覽:258