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面试来说绝对是加分项

  • 相关阅读:
    js技巧收集(200多个)
    我的博客开张了,欢迎大家前来做客
    认识ASP.NET配置文件Web.config
    C#纯数学方法递归实现货币数字转换中文
    Asp.Net细节性问题技巧精萃(转载)
    ASP.NET2.0+SQL Server2005构建多层应用
    ASP.NET页面间的传值的几种方法(转载)
    介绍几种 ADO.net 中的数据库连接方式
    hdu 1401
    poj 1338 丑数
  • 原文地址:https://www.cnblogs.com/zhengxl5566/p/10332272.html
Copyright © 2011-2022 走看看