zoukankan      html  css  js  c++  java
  • [JAVA]JAVA实现多线程的三种方式

    1、继承Thread类,通过start()方法调用

    public class MultiThreadByExtends extends Thread {
        @Override
        public void run() {
            print("听歌");
        }
        public static void print(String threadName){
            while (true) {
                System.out.println("线程:"+threadName+" 输出。。。");
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
    
        public static void main(String[] args) {
            MultiThreadByExtends t1 = new MultiThreadByExtends();
            t1.start();
            print("写代码");
        }
    }

    输出结果:

    
    

    线程:写代码 输出。。。
    线程:听歌 输出。。。
    线程:写代码 输出。。。
    线程:听歌 输出。。。
    线程:写代码 输出。。。
    线程:听歌 输出。。。
    线程:听歌 输出。。。

     

    由于java单继承的特点,这种方式局限性很大,不能继承其他父类

    2、实现Runable接口

    public class MultiThreadByRunnable implements Runnable {
        @Override
        public void run() {
            print("听歌");
        }
        public static void print(String threadName){
            while (true) {
                System.out.println("线程:"+threadName+" 输出。。。");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
    
        public static void main(String[] args) {
            MultiThreadByRunnable tr1 = new MultiThreadByRunnable();
            //代理方式启动
            Thread thread = new Thread(tr1);
            thread.start();
            print("写代码");
        }
    }

    输出结果:

    线程:写代码 输出。。。
    线程:听歌 输出。。。
    线程:写代码 输出。。。
    线程:听歌 输出。。。
    线程:听歌 输出。。。
    线程:写代码 输出。。。
    线程:听歌 输出。。。
    线程:写代码 输出。。。

    3、实现callable接口

    import java.util.concurrent.*;
    
    public class CallableTest implements Callable<Boolean> {
        @Override
        public Boolean call() throws Exception {
            int count = 0;
            while (true){
                System.out.println("1111");
                Thread.sleep(1000);
                count++;
                if(count >10) {
                    break;
                }
            }
            return true;
        }
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
    
            CallableTest c = new CallableTest();
            ExecutorService es = Executors.newFixedThreadPool(1);
            Future<Boolean> res = es.submit(c);
            System.out.println(res.get());
            es.shutdownNow();
        }
    }

    该方式的优点是可以得到线程的返回值 

    平时开发中常用到的就是1、2两种方式,至于第三种,属于JUC里面的东西,如果在面试中能答上来,对初级或中级java面试来说绝对是加分项

  • 相关阅读:
    【JZOJ3213】【SDOI2013】直径
    【JZOJ3211】【SDOI2013】随机数生成器
    【巨人的步伐以及人类的进击】BSGS algorithm
    【JZOJ2758】【SDOI2012】走迷宫(labyrinth)
    【JZOJ4964】【GDKOI2017模拟1.21】Rhyme
    【JZOJ3875】【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
    【JZOJ3873】【NOIP2014八校联考第4场第2试10.20】乐曲创作(music)
    【JZOJ3887】【长郡NOIP2014模拟10.22】字符串查询
    【JZOJ3886】【长郡NOIP2014模拟10.22】道路维护
    django 模版-标签-视图-csrf-token-模版继承-HTML过滤器
  • 原文地址:https://www.cnblogs.com/zhengxl5566/p/10332272.html
Copyright © 2011-2022 走看看