1. 程式人生 > >線程的操作方法

線程的操作方法

事務 ati one executors 不能 override 之前 lis ray

線程的操作方法

嘿嘿!這裏比較重復麻煩奧~~~ 我該怎麽水過這篇博客

1.線程休眠

  sleep()方法指定一個參數用於該線程的休眠時間,要加異常處理,線程醒來後並不能保證立刻進入運行狀態,只能保證它進入就緒狀態。

代碼:

try {
    sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

2.線程加入

  當某個線程使用join()方法加入到另一個線程中時,另一個線程會等待這個空降兵執行完畢之後再繼續執行。

舉個例子,線程加入一般是這樣的情況:主線程生成並起動了子線程,如果子線程裏要進行大量的耗時的運算,主線程往往將於子線程之前結束。

但是如果主線程處理完其他的事務後,需要用到子線程的處理結果,也就是主線程需要等待子線程執行完成之後再結束,這個時候就要用到join()方法了。

代碼:提醒大家一下,這個就休眠時間啊真的是一門學問奧。

station.java

package com;

public class station extends Thread {

    int ticket=10;//票數
    static Object lock="locked";
    
    boolean node = true;
    public station(String name) {
        
super(name); } @Override public void run() { super.run(); while(ticket>0) { synchronized(lock) { if(ticket>0) { System.out.println(getName()+"賣出第"+ticket+"張票"); --ticket;
if(ticket==5&&node) { try { Thread.sleep(1000); Thread addticket = new Thread(new Runnable() { @Override public void run() { add(); System.out.println("補票了"); } }); addticket.join(); addticket.start(); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }else { System.out.println("票賣完了"); } } // try { // sleep(1000); // } catch (InterruptedException e) { // e.printStackTrace(); // } } } public void add() { ticket+=6; node=false; } }

App.java

package com;

import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class App {

    public App() throws InterruptedException, ExecutionException {
        
        s1.start();//啟動
    }
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        new App();
    }
}

3.線程中斷

  現在已經不用stop();了。現在提倡再run()方法中使用無限循環然後用boolean標記控制循環的終止。

代碼:

boolean isContinue = true;
    public void run() {
        while(true) {
            ..........
            ..........
            ..........
            if(isContinue)//布爾值
                break;
        }
    }
    private void setContinue() {
        this.continue = false;
    }

4.線程禮讓( yield();不過這個似乎沒多少用,我就不解釋了,想要了解的話就搜別人的博客看吧 )拜拜!~!~!~

線程的操作方法