首页 > 编程语言 >Java笔记(11) 多线程

Java笔记(11) 多线程

时间:2023-04-06 18:48:13浏览次数:38  
标签:11 Runnable Java Thread 接口 线程 多线程 public

Java原生支持多线程,主要通过以下四种方式实现多线程:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 线程池

继承Thread类

通过创建Thread类的子类,并重写run()方法,通过调用start()方法启动线程。

public class TestThread extends Thread {
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 10; i++) {
            System.out.println("run方法线程体" + i);
        }
    }
    public static void main(String[] args) {
        //main线程,主线程

        TestThread testThread = new TestThread();//创建一个线程对象
        testThread.start();//调用start()方法,启动线程
        for (int i = 0; i < 10; i++) {
            System.out.println("main方法线程体" + i);
        }
    }
}

TestThread
可以看到两个线程的执行过程是混乱的,这就说明两个线程的执行顺序是随机的,并不是按照调用顺序来执行的。
但一般不建议使用继承Thread类的方式实现多线程,因为Java是单继承的,子类继承Thread类之后,会限制后续扩展。

实现Runnable接口

Thread类就实现了Runnable接口,我们也可以实现Runnable接口并实现run()方法来实现多线程。在创建Thread类的时候,将待执行线程作为参数传递,调用start()方法启动。

//实现Runnable接口,并实现run()方法
public class TestThread3 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("run 方法线程: " + i);
        }
    }
    public static void main(String[] args) {
        TestThread3 testThread3 = new TestThread3();//创建新线程
        new Thread(testThread3).start();//创建Thread类,并将待执行线程作为参数传递进去,调用start()方法启动
        for (int i = 0; i < 5; i++) {
            System.out.println("main 方法线程: " + i);
        }
    }
}

Runnable
相比于第一种方案,更推荐使用接口方案,继承Runnable接口避免了收到单继承的限制,也方便同一个对象被多个线程使用

实现Callable接口

Callable接口类似于Runnable接口,都是为 其实例可能由另一个线程执行的类 而设计的。 不过相比于Runnable接口实现多线程的方式,实现Callable接口的多线程方式可以返回结果,并可能抛出异常。实现Callable接口并实现call方法。

public class TestCallable implements Callable<Boolean> {

    @Override
    public Boolean call() throws Exception {  //实现call()方法
        for (int i = 0; i < 5; i++) {
            System.out.println("call 方法线程: " + i);
        }
        return true;
    }
    public static void main(String[] args) {
        TestCallable testCallable = new TestCallable();  //创建新任务
        ExecutorService executorService = Executors.newFixedThreadPool(1); //创建线程池
        Future<Boolean> res = executorService.submit(testCallable);  //将任务提交到线程池
        for (int i = 0; i < 5; i++) {
            System.out.println("main 方法线程: " + i);
        }
        executorService.shutdown();  //需要手动关闭线程池服务
    }
}

Callable

线程池

待编辑...

标签:11,Runnable,Java,Thread,接口,线程,多线程,public
From: https://www.cnblogs.com/hiibird/p/17293129.html

相关文章

  • java基础起步五-数组(1)
    ·数组(array):简单的说就是一组数。java中数组也是一种数据类型,相同数据类型的匀速按照一定的顺序的集合,而且是有限个类型相同的变量用一个名字来命名。比如要存储1706A班级的学员成绩,第一组有四个同学,我们可以如下定义:intscore1=80;intscore2=82;intscore3=83;ints......
  • java基础起步三-流程控制语句中的条件语句
    文章目录流程控制语句结构:1.顺序结构2.分支结构3.循环结构分支结构语法:1.单分支结构;2.双分支结构3.多分支条件语句:选择结构语法:注意:输入输出案例练习题本节课我们学习java基础部分的流程控制语句,流程控制语句方为三种结构:顺序结构,任何程序的执行都是自上而下,从左到右的执行......
  • java 开发手册(零散)
    tomcat-5.5\conf\server.xml 配置端口TOMCAT需要重启 不同版本的MyEclipse7.0的安装路径是不同的里面的文件夹内容结构也不一样导致我tomcat插件在8.5中怎么搞都出不来--------------------MyEclipse8.5---------------------------------------------C:\ProgramFiles\Genu......
  • JavaScript ES6中class的用法
    实例代码如下classPerson{constructor(name){if(!arguments.length){console.log("我是个人")}else{console.log(`我是${name}`)}}......
  • windows11安装wsl
    一:安装步骤1:打开电脑的搜索2:搜索框输入:powershell3:点击,自动进入窗口4:输入命令:wsl--install  二:遇到问题输入安装命令后,报错如下图:  三:解决方法控制面板--查看网络状态和任务--更改适配器设置--点击正在连接的网络--双击Internet协议版本4--输入如图2行数字即可......
  • 判断Java类的所有属性是否都为null
    为了判断Java类的所有属性是否都为null,你可以编写一个方法来检查每个属性是否为null。以下是一个示例实现:publicstaticbooleanallFieldsNull(Objectobj)throwsIllegalAccessException{for(Fieldfield:obj.getClass().getDeclaredFields()){field.setAc......
  • Android 11全屏显示
    @OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//去掉标题栏this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(ActivityLoginBinding.inflate(getLayoutInflater()......
  • 11-springcloud-eureka-7-Eureka 注册中心高可用集群
    在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性问题,不能有单点故障,由于注册中心eureka本身也是一个服务,如果它只有一个节点,那么它有可能发生故障,这样我们就不能注册与查询服务了,所以我们需要一个高可用的服务注册中心,这就需要通过注册中心集群来解决。......
  • 肖sir__java_知识点1
    (一)java基础1、JDK>JRE>JVMJDK:英文名称(JavaDevelopmentKit),Java开发工具包。jdk是整个Java开发的核心,它集成了jre和一些好用的小工具。例如:javac.exe,java.exe,jar.exe等。JRE:英文名称(JavaRuntimeEnv1ronmeni,仅1们"的m此其运行时环境。它主要包含两个部分,3vmB.q分的......
  • 大意了,一次多线程操作不当导致的线上事故...
    大家好,我是飘渺。今天给大家分享个生产事故,一个由于多线程操作不当导致的线上事故,事情是这样的~事故描述从6点32分开始少量用户访问app时会出现首页访问异常,到7点20分首页服务大规模不可用,7点36分问题解决。整体经过6:58发现报警,同时发现群里反馈首页出现网络繁忙,考虑到前几日晚上......