当前位置 : 主页 > 编程语言 > java >

Java中线程的生命周期以及线程的使用

来源:互联网 收集:自由互联 发布时间:2022-08-10
直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。 class T extends Thread { @Override public void run () { System . out . println ( "ttttt" ); } public static vo


Java中线程的生命周期以及线程的使用_子线程

  • 直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。
  • class T extends Thread{
    @Override
    public void run() {
    System.out.println("ttttt");
    }
    public static void main(String[] args) {
    T t = new T();
    t.start();
    }
    }
  • 通过实现 Runnable 接口,为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:
  • class T implements Runnable{
    @Override
    public void run() {
    System.out.println("ttttt");
    }
    public static void main(String[] args) {
    T t = new T();
    new Thread(t).start();
    }
    }
  • 通过 Callable 和 Future 创建线程。
  • 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
  • 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
  • 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
  • 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
  • public class CallableThreadTest implements Callable<Integer> {
    public static void main(String[] args)
    {
    CallableThreadTest ctt = new CallableThreadTest();
    FutureTask<Integer> ft = new FutureTask<>(ctt);
    for(int i = 0;i < 100;i++)
    {
    System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i);
    if(i==20)
    {
    new Thread(ft,"有返回值的线程").start();
    }
    }
    try
    {
    System.out.println("子线程的返回值:"+ft.get());
    } catch (InterruptedException e)
    {
    e.printStackTrace();
    } catch (ExecutionException e)
    {
    e.printStackTrace();
    }

    }
    @Override
    public Integer call() throws Exception
    {
    int i = 0;
    for(;i<100;i++)
    {
    System.out.println(Thread.currentThread().getName()+" "+i);
    }
    return i;
    }
    }


    上一篇:java中输出~6=-7的原因
    下一篇:没有了
    网友评论