线程的操作方法

线程的操作方法

嘿嘿!这里比较重复麻烦奥~~~ 我该怎么水过这篇博客

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();不过这个似乎没多少用,我就不解释了,想要了解的话就搜别人的博客看吧   )拜拜!~!~!~

posted @ 2019-04-06 18:59  ikefire  阅读(385)  评论(0编辑  收藏  举报