当前位置: 首页 > news >正文

实现Callable接口实现线程创建及线程注意事项包括线程状态,一些API


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Test6 {

    public static void main(String[] args) {
        test2();
        test1();
        test();
    }
    static void test2(){
        //3.Callable
        // 3.1、创建Callable接口的实现类,实现call() 方法
        // 3.2、创建Callable实现类实例,通过FutureTask类来包装Callable对象,该对象封装了Callable对象的call()方法的返回值。
      // 3.3、将创建的FutureTask对象作为target参数传入,创建Thread线程实例并启动新程。
        // 3.4、调用FutureTask对象的get方法获取返回值。
        Test2 test2 = new Test2();
        FutureTask task = new FutureTask(test2);
        Thread thread = new Thread(task);
        //启动线程
        thread.start();
        //获取线程的返回值
        try {
            System.out.println(task.get().toString());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }
    static void test1(){
        //2.Runable 方式
        Thread t = new Thread(new Test1(), "乌龟");
        Thread r = new Thread(new Test1(), "兔子");
        //启动线程,不能多次调用
        t.start();
        r.start();
    }
    static void test(){
        //1.继承
        Test7 thread_1 = new Test7("thread_一");
        Test7 thread_2 = new Test7("thread_二");
        //启动start()
        thread_1.start();
        thread_2.start();
    }
}
//3.Callable
class Test2 implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        int sum=0;
        for(int i =1;i<=100;i++)
        {
            sum+=i;
        }
        return sum;
    }
}


//2.实现Runnable
class Test1 implements Runnable{

    @Override
    public void run() {
        for (int i = 100;i>0;i--)
        {
            System.out.println(Thread.currentThread().getName()+":领先了,还剩多少米"+i);
        }
    }
}

//1.继承Thread
class Test7 extends Thread{
    Test7(String name){
        super(name);
    }
    @Override
    public void run() {
        int i = 0;
        while (true){
            System.out.println(getName()+"=="+i);
            i++;
        }
    }
}

运行截图
请添加图片描述
请添加图片描述
请添加图片描述

线程注意事项

start(启动线程)不能多次调用
线程状态:
新建:新建对象,未获得资源
就绪:获得除cpu以外的以外资源
运行:获得cpu使用权
等待/阻塞:中途停止cpu使用,即阻塞,等待重新进入就绪状态
死亡:系统回收利用资源

API

获取当前线程的名字:currentThread().getName()
sleep()休眠当前执行的线程
yield()获得的时间片让出,使得成为最后执行的线程
interrupted()判断当前线程是否中断
setPriority()设置优先级
改变共享变量值中断run()执行
interrupt()抛出中断被阻塞进程异常,使得提前结束阻塞状态

相关文章:

  • 2023年湖北安全员ABC报名条件、报名流程、报名需要什么资料呢?甘建二
  • 液位检测仪在线监测系统解决方案
  • Argo rollouts + istio服务网格实现金丝雀灰度发布
  • 摸鱼三天,我写了一个通用的组建树TreeUtil工具
  • 【Telegraf 介绍】
  • 【React】类excel表格的开源项目handsontable
  • 2022前端面试—js+vue篇(持续更新)
  • MySQL数据库管理(二)
  • 【我的世界Minecraft-MC】常见及各种指令大杂烩【2022.8版】
  • mpls详解
  • Mac电脑配置Java环境和android环境,删除谷歌浏览器的自动更新
  • 华为开发后端实习体验总结帖(详细)
  • 认真研究ConcurrentHashMap中的元素统计策略
  • TinyRenderer学习笔记--Lesson 3、4
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • co模块的前端实现
  • java中的hashCode
  • Mysql5.6主从复制
  • node入门
  • PHP CLI应用的调试原理
  • Python socket服务器端、客户端传送信息
  • Rancher-k8s加速安装文档
  • React Transition Group -- Transition 组件
  • select2 取值 遍历 设置默认值
  • Shell编程
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 基于遗传算法的优化问题求解
  • 面试遇到的一些题
  • 如何胜任知名企业的商业数据分析师?
  • 深度学习中的信息论知识详解
  • 推荐一个React的管理后台框架
  • 小试R空间处理新库sf
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #{} 和 ${}区别
  • #FPGA(基础知识)
  • (1)常见O(n^2)排序算法解析
  • (145)光线追踪距离场柔和阴影
  • (分类)KNN算法- 参数调优
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)linux下的时间函数使用
  • (转)Sql Server 保留几位小数的两种做法
  • ./configure,make,make install的作用(转)
  • .NET Core 项目指定SDK版本
  • .Net Winform开发笔记(一)
  • .NET使用存储过程实现对数据库的增删改查
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @RunWith注解作用
  • [Android]使用Retrofit进行网络请求
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [CISCN 2019华东南]Web11
  • [CTF]php is_numeric绕过
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)