zoukankan      html  css  js  c++  java
  • 实现多线程的四种方法

    1.继承Thread类,重写run方法;
    2.实现Runnable接口,重写run方法;
    3.实现Callable接口,重写call方法;
    4.通过线程池实现多线程(实现Runnable接口+Executors创建线程池);

    前2种方法无返回值,后2种方法有返回值。

    继承Thread类,重写run方法

    public class TTEST extends Thread{
     
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
        
        public static void main(String[] args) {
            Thread t1 = new TTEST();
            Thread t2 = new TTEST();
            t1.setName("线程1");
            t2.setName("线程2");
            t1.start();
            t2.start();
        }

    实现Runnable接口,重写run方法

    public class RunnableThread implements Runnable{
     
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
     
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName());
            RunnableThread runnableThread = new RunnableThread();
            Thread t1 = new Thread(runnableThread);
            t1.setName("线程1");
            t1.start();
        }
        
    }

    实现Callable接口,重写call方法

    因为FutureTask类实现了RunnaleFuture,而RunnaleFuture又实现了Runnable接口和Future接口,通过FutureTask封装继承Callable接口的类

    import java.util.concurrent.Callable;
    import java.util.concurrent.FutureTask;
     
    public class CollableThread implements Callable<Object>{
     
        @Override
        public Object call() throws Exception {
            System.out.println(Thread.currentThread().getName());
            return null;
        }
     
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName());
            CollableThread collableThread = new CollableThread();
            FutureTask<Object> futureTask = new FutureTask<Object>(collableThread);
            Thread t1 = new Thread(futureTask);
            t1.setName("线程1");
            t1.start();
        }
        
    }

    通过线程池实现多线程(实现Runnable接口+Executors创建线程池)

    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
     
    public class PoolThread implements Runnable{
     
        private static int POOL_NUM = 10;//线程池数量
        
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
     
        public static void main(String[] args) {
            ExecutorService threadPool = Executors.newFixedThreadPool(5);
            for (int i = 0; i < POOL_NUM; i++) {
                PoolThread poolThread = new PoolThread();
                threadPool.execute(poolThread);
            }
            threadPool.shutdown();//关闭线程池
        }
        
    }
  • 相关阅读:
    I2C调试
    linux读取cpu温度
    看react全家桶+adtd有感
    react学习1(搭建脚手架,配置less,按需引入antd等)
    去掉console.log,正式环境不能有console.log
    Vue的minix
    数组去重我总结的最常用的方法,其他不常用就不写了
    inline-block bug解决方法
    vue中使用less/scss(这是2.0 3.0就不需要手动配置了只需要安装依赖就行了)
    Vue 调用微信扫一扫功能
  • 原文地址:https://www.cnblogs.com/lc0605/p/11738207.html
Copyright © 2011-2022 走看看