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();//关闭线程池
        }
        
    }
  • 相关阅读:
    angluar项目里用ant.design组件库做排序功能,可以接口排序,可以组件库做
    echarts箱线图例子分析
    echarts的盒须图问题自问自答自己改造例子
    把数组改成echarts中dataset所需的二维数组
    echarts的markline个性化
    echarts使用dataset实现双y轴效果
    echarts散点图例子scatter-weight折腾记之echarts参数修改
    echarts灵活利用dataset生成多个散点图的例子
    echarts用dataset实现之散点图例子Basic Scatter Chart
    随机字符串生成指定范围内的某个数值
  • 原文地址:https://www.cnblogs.com/lc0605/p/11738207.html
Copyright © 2011-2022 走看看