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();//关闭线程池
        }
        
    }
  • 相关阅读:
    HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
    FJNU2018低程F jq解救fuls (贪心乱搞)题解
    Gym 101775J Straight Master(差分数组)题解
    FJUT3591 侦测到在途的聚变打击(最小不可相交路径覆盖)题解
    HDU 6406 Taotao Picks Apples & FJUT3592 做完其他题后才能做的题(线段树)题解
    vijos 1907 飞扬的小鸟
    vijos 1779 国王游戏
    BZOJ 3439 Kpm的MC密码
    BZOJ 3163 Eden的新背包问题
    codevs 5429 完全背包
  • 原文地址:https://www.cnblogs.com/lc0605/p/11738207.html
Copyright © 2011-2022 走看看