首页 > 编程语言 >java中线程的启动方式

java中线程的启动方式

时间:2023-05-31 09:12:23浏览次数:30  
标签:java Thread 启动 void run 线程 new 中线 public

 

1.继承Thread类 重写run方法

public class TreadTest01 extends Thread{
    @SneakyThrows
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            Thread.sleep(100);
            System.out.println(Thread.currentThread().getName()+"运行了"+i);
        }
    }

    public static void main(String[] args) {
        TreadTest01 treadTest01 = new TreadTest01();
        treadTest01.setName("tread01");
        treadTest01.run();

        TreadTest01 treadTest02 = new TreadTest01();
        treadTest02.run();
        System.out.println("执行完成....");
    }
}

  

2.实现Runnable接口 重写run方法

public class RunnableTest {
    /**
     * 多线程第二种启动方式:
     * 1.自己定义一个类去实现 runnable接口
     * 2.重新run方法--线程执行的代码
     * 3.创建自己的对象
     * 4.创建一个Thread类的对象 并开启线程
     */

    public static class  MyRun implements Runnable{

        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println(Thread.currentThread().getName()+":hello thead"+i);
            }
        }
    }
    public static void main(String[] args) {
        // 任务
        MyRun myRun = new MyRun();
        // 线程1
        Thread t1=new Thread(myRun);
        t1.start();
        t1.setName("线程1");

        // 线程2
        Thread t2=new Thread(myRun);
        t2.start();
        t2.setName("线程2");
    }
}

  

3.实现Callable 重写call方法 配合FuterTask获取线程结果

public class CallableTest {
    /**
     * 多线程第三种启动方式:
     * 解决:多线程其他两种没有返回值
     * 特点:可以获取多线程的运行结果
     *
     * 1.创建一个类 实现Callabel接口
     * 2.重写 call(有返回值表示结果)
     * 3.创建任务对象
     * 4.创建 FutureTask对象(管理多线程结果)
     * 5.创建Thread类并启动,
     */

    public static class  MyCallableTest implements Callable<Integer>{

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

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallableTest myCallableTest = new MyCallableTest();
        FutureTask<Integer> futureTask = new FutureTask(myCallableTest);
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get());

        ExecutorService executorServiceCach = Executors.newCachedThreadPool();
    }
}

  

4.利用线程池启动线程

public class TestThreadPool {

    public static void main(String[] args) {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 1000, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
        threadPoolExecutor.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("aaaa");
            }
        });
    }
}

  

本质:以下所有的启动方式本质上都是实现 runnable接口

 

 

 

 

标签:java,Thread,启动,void,run,线程,new,中线,public
From: https://www.cnblogs.com/javacx/p/17444310.html

相关文章

  • java中线程的状态
    一:从操作系统上说可以分为5种 新建:线程被创建出来时就绪:此时cpu拥有可执行权,但是未被真正执行运行中:线程正在执行等待:被阻塞了(sleepwait方法等)结束:整个线程结束二:从java源码中分为6种状态从Thread源码中我们可以看到一个枚举类:JAVA给出了以下6种状态NEW  ......
  • Java中如何中断线程
    在Java中,可以使用以下方法中断线程:1.使用`interrupt()`方法:每个线程对象都有一个`interrupt()`方法,用于中断该线程。当调用线程的`interrupt()`方法时,它会设置线程的中断状态为"中断",但并不会立即停止线程的执行。线程在执行过程中可以通过检查中断状态来决定是否终止执行。2.......
  • Java并发(七)----线程sleep、yield、线程优先级
    1、sleep与yieldsleep调用sleep会让当前线程从Running进入TimedWaiting状态(阻塞)其它线程可以使用interrupt方法打断正在睡眠的线程,这时sleep方法会抛出InterruptedException睡眠结束后的线程未必会立刻得到执行建议用TimeUnit的sleep代替Thread......
  • 基于JAVA的springboot+vue学生综合测评系统,附源码+数据库+论文+PPT
    1、项目介绍本学生综合测评系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括首页,个人中心,学生管理,试题信息管理,测评试题管理,管理员管理,综合测评管理,系统管理,综合考试管理等功能,通过这些功能的实现基本能够满足日常......
  • java中什么是锁消除和锁粗化?
    锁消除和锁粗化都是Java中针对锁的优化技术。锁消除:在Java编译时,JIT编译器可以通过静态分析发现不必要的同步,然后将其消除。这样会使得代码执行更快,因为它减少了线程的上下文切换和锁处理的开销。锁粗化:在Java中,每次加锁和解锁都需要进行系统调用。如果加锁和解锁的代码很近,那么......
  • java运行数据区域
    1程序计数器程序计数器(ProgramCounterRegister)是一块较小的内存空间,他可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转......
  • springboot启动源码
    每个SpringBoot项目都有一个主程序启动类,在主程序启动类中有一个启动项目的main()方法,在该方法中通过执行SpringApplication.run()即可启动整个SpringBoot程序。问题:那么SpringApplication.run()方法到底是如何做到启动SpringBoot项目的呢?下面我们查看run()方法内部的源码,核......
  • JAVA三大特性
    封装把对象的属性和具体行为看成一个私有的不可见的整体,不允许被外部修改,但是提供访问接口这种对外简单使用,对内隐藏复杂性的形式符合高内聚低耦合的程序设计也提高了系统整体的可维护性典型的是使用private控制访问权限私有 继承父类可以有多个子类,子类只能有一个分类......
  • Javascript上传文件到阿里OSS存储,并支持进度查看
    现在使用js上传文件的插件有很多,例如:plupload等等今天我记录一下使用原生js的上传文件,并且支持进度查看,下面直接上代码:html代码:<inputtype="file"onchange="uploadMedia(this)"><aid="showProgress"style="display:none;"href="#"></a>预览效......
  • Python 执行Javascript脚本
    一、安装第三方库pipinstallPyExecJS二、创建一个js文件//test.jsfunctionadd(a,b){returna+b}三、创建一个python文件#testJs.pyimportexecjsctx=execjs.compile(open('./test.js','r',encoding='utf-8').read())print(ctx.call('add&#......