尝试使用Threads实现一个简单的java程序

时间:2015-03-05 05:58:43

标签: java multithreading

import java.util.Random;

public class ThreadLogic implements Runnable {
    private String name;
    private int time;
    private Random rand = new Random();

    public ThreadLogic(String name) {
        this.name = name;
        this.time = rand.nextInt(1000);


    }

    public void run() {
        try {
            System.out.printf("%s is sleeping for %d \n", this.name, this.time);
            Thread.sleep(this.time);
             System.out.printf("%s is done.\n", this.name);
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }

        public static void main(String[] args) {
        Thread t1 = new Thread(new ThreadLogic("Thread-1"));
        Thread t2 = new Thread(new ThreadLogic("Thread-2"));
        Thread t3 = new Thread(new ThreadLogic("Thread-3"));

       t1.start();
       //t1.stop();
       t2.start();
       t3.start();
       t1.stop();
       System.out.println("State of Thread-1:"+" "+t1.getState());
       System.out.println("State of Thread-2"+" "+t2.getState());
       System.out.println("State of Thread-3"+"  "+t3.getState());
       System.out.println("isalive:"+t1.isAlive());
       System.out.println("isalive:"+t2.isAlive());
       System.out.println("isalive:"+t3.isAlive()); 

       }
    }

从上面的代码中,我如何在run()方法中实现这样的逻辑:如果线程等待超过指定的时间,我想杀死该线程并检查其他两个线程发生的情况运行。当我执行上面的代码时,它给出了以下输出。

  

线程状态-1:已终止   
螺纹状态-2 RUNNABLE   
螺纹状态-3 RUNNABLE   
的IsAlive:假   
的IsAlive:真   
的IsAlive:真   
线程-2正在睡觉151   
Thread-3正在睡觉384   
线程-2完成。   
完成了Thread-3。

1 个答案:

答案 0 :(得分:0)

首先thread.stop()应该,因为它已被弃用。 (阅读here原因

其次考虑使用ExecutorService.submit来执行一个线程;这将返回Future。在此future对象上,您可以在手动等待所需的时间限制之后直接调用cancel 调用get,这会花费时间等待,然后再使用{在时间间隔到期后{1}},您可以取消该帖子。