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

举报
知识浅谈 发表于 2022/06/28 23:24:47 2022/06/28
【摘要】 直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。 class T extends Thread{ @Override ...

在这里插入图片描述

  1. 直接继承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();
        }
    }
    
        
       
  2. 通过实现 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();
        }
    }
        
       
  3. 通过 Callable 和 Future 创建线程。

    1. 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。

    2. 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。

    3. 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。

    4. 调用 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;  
        }  
    }
    
        
       

文章来源: englishcode.blog.csdn.net,作者:知识浅谈,版权归原作者所有,如需转载,请联系作者。

原文链接:englishcode.blog.csdn.net/article/details/120684442

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。