1. 程式人生 > >java 多執行緒控制執行緒執行順序

java 多執行緒控制執行緒執行順序

之前遇到過這個問題,直接上程式碼記錄下:

public class RunableTest implements Runnable {

    volatile int target="A".codePointAt(0);
    static int minOrder="A".codePointAt(0);
    static int maxOrder="C".codePointAt(0);

    @Override
    public void run() {
        synchronized (this){
            int order=Thread.currentThread().getName().codePointAt(0);
            for (int i=0;i<10;i++){
                while (target!=order){
                    try{
                        wait();
                    }catch (Exception ex){

                    }
                }
                System.out.println(Thread.currentThread().getName());
                target=order+1;
                if(target>maxOrder){
                    target=minOrder;
                }
                notifyAll();
            }

        }

    }
}
public class TestMain {

    public static void main(String[] args){


        Runnable runnable=new RunableTest();

        Thread threadA=new Thread(runnable,"A");
        Thread threadB=new Thread(runnable,"B");
        Thread threadC=new Thread(runnable,"C");

        threadA.start();
        threadB.start();
        threadC.start();



    }
}

執行結果

A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C

相關推薦

執行-執行控制之休眠執行

package cn.itcast_04; import java.util.Date; public class ThreadSleep extends Thread { @Override

一個執行控制另一個執行的暫停或啟動

MainTest類中可以控制執行緒的暫停或繼續執行。 public class MainTest { /** * 這個執行緒操作另一個執行緒的暫停或開始 * @param args */ public static void main(String[] args) {

RT-Thread 讀後感2——建立執行(定義執行的棧,定義執行函式,定義執行控制塊,執行初始化函式)

1. 定義執行緒的棧 多執行緒作業系統中,每個執行緒都是獨立的,互不干擾,所以要為每個執行緒分配獨立的棧空間,這個棧空間通常是一個預先定義好的全域性陣列, 也可以是動態分配的一段記憶體空間,但它們都存在於 RAM 中。定義兩個執行緒棧如下: // 定義執行緒棧 大小設定為512 rt_ui

用一個執行控制一個事務執行

1.專案啟動會執行該執行緒,然後這個執行緒控制執行一個事務 1.專案用的struts2+spring   再web.xml新增監聽      <listener><listener-class>cn.cntomorrow.jzsh.timerThe

工作流4-流程例項,任務,執行物件控制流程的執行

流程例項: 從開始到結束 流程物件: 一個流程,流程例項只有一個,執行物件可以存在多個 1.啟動流程例項 public void startProcessInstance(){ //流程定義的key,根據key啟動最新version流程 String pr

【Activiti工作流】8.流程例項,任務,執行物件控制流程的執行

我們之前講過了流程的定義,啟動,檢視和刪除,以及升級版本,接下來當流程 正式啟動成功之後,我們就要學習流程例項/任務的執行了。 1,流程例項/任務的執行 (1)啟動流程例項 (這裡前提是大家部署好了流程)/** * 啟動流程 * 當流程到達一個節點時,會在act_ru_

Java筆記-執行執行控制

執行緒控制 我們已經知道了執行緒的排程,接下來我們就可以使用如下方法物件執行緒進行控制。 1.執行緒休眠 public static void sleep(long millis):讓當前執行緒處於暫停狀態,millis引數毫秒值,即暫停時間。 程式

JAVA執行控制JAVA 5.0--Executor

JAVA多執行緒的控制JAVA 5.0 2010-09-20 10:48   在Java 5.0之前啟動一個任務是通過呼叫Thread類的start()方法來實現的,任務的提於交和執行

Java執行(二)、執行的生命週期和狀態控制

、執行緒的生命週期 執行緒狀態轉換圖: 1、新建狀態 用new關鍵字和Thread類或其子類建立一個執行緒物件後,該執行緒物件就處於新生狀態。處於新生狀態的執行緒有自己的記憶體空間,通過呼叫start方法進入就緒狀態(runnable)。 注意:不能對已經啟動的

Java 執行設定執行超時時間之 Callable介面和Future介面 超時控制

Callable介面和Future介面介紹         在Java中,如果需要設定程式碼執行的最長時間,即超時,可以用Java執行緒池ExecutorService類配合Future介面來實現。 Future介面是Java標準API的一部分,在java.uti

java 執行控制執行執行順序

之前遇到過這個問題,直接上程式碼記錄下: public class RunableTest implements Runnable { volatile int target="A".codePointAt(0); static int minOrder=

java執行的共享變數訪問控制例項

最近打算去一家電商公司,對於高併發的資料訪問控制有著嚴格的要求,近期打算把多執行緒的知識在好好補一下。 執行緒排程有五個狀態; 開始,可執行,執行,阻塞,死亡。 啟動執行緒有兩種方法。繼承Thread類或則實現Runnable介面,其實Thread類也實現

(java執行併發)控制併發執行數的Semaphore

1.簡介    訊號量(Semaphore),有時被稱為訊號燈,是在多執行緒環境下使用的一種設施, 它負責協調各個執行緒, 以保證它們能夠正確、合理的使用公共資源。 2.概念     Semaph

Java執行suspend、sleep的控制鎖的釋放的區別

         因為馬上畢業了,最近一直在複習Java的基礎知識,多執行緒當然是重點了,今天上午一直在看執行緒的生命階段,其中有過時的方法suspend用來掛起一個執行緒。而關於該方法為何被拋棄了,看了開發文件中是這麼描述的:【方法已經遭到反對,因為它具有固有的死鎖傾向。

Java執行執行的生命週期和狀態控制

一、執行緒的生命週期 執行緒狀態轉換圖: 1、新建狀態 用new關鍵字和Thread類或其子類建立一個執行緒物件後,該執行緒物件就處於新生狀態。處於新生狀態的執行緒有自己的記憶體空間,通過呼叫start方法進入就緒狀態(runnable)。 注意:不能對已經啟動的執行緒再次呼叫star

Windbg除錯----執行控制除錯

在除錯程式的時候,可能經常會有這樣的需求,讓一個執行緒在特定的時候才讓其開始執行或者暫停執行。比如複雜的多執行緒導致死鎖的問題,又或者多執行緒中的Race Condition 導致程式執行異常等。 很多時候,我們可以藉助編寫除錯程式碼來達到多執行緒的除錯,可是有些情況下除錯的執行粒度是指

Java執行實現電影院售票案例

某電影院目前正在上映賀歲大片,共有100張票,而它有3個售票視窗,請設計一個程式模擬該電影院售票。 定義Sell類實現Runnable介面,很好的解決了單繼承共享資源問題 public class Sell implements Runnable { // 定義100張票,三個售票

java執行物件鎖、類鎖、同步機制詳解

1.在java多執行緒程式設計中物件鎖、類鎖、同步機制synchronized詳解:     物件鎖:在java中每個物件都有一個唯一的鎖,物件鎖用於物件例項方法或者一個物件例項上面的。     類鎖:是用於一個類靜態方法或者class物件的,一個

Java 執行實現死鎖場景

簡述: 《Java 程式設計思想》  P718 ~ P722 模擬死鎖的場景, 三個人 三根筷子,每個人需要拿到身邊的兩根筷子才能開始吃飯 出現死鎖的場景是,三個人都拿到了右邊的筷子,但是由於筷子都被搶佔,均無法獲得左邊的筷子 Chopstick.java

Java 執行 join和interrupt 方法

簡述: 使用Java多執行緒中join和interrupt函式 《Java程式設計思想》 P669 ~ P670 一個執行緒可以再其他執行緒上呼叫join()方法,其效果是等待一段時間直到第二個執行緒結束才繼續執行。 如果某個執行緒在另一個執行緒t上呼叫t.join(), 此