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

  • 相关阅读:
    requests实现接口自动化(三)
    api 25 PopupWindow会占据整个屏幕
    INSTALL_FAILED_USER_RESTRICTED
    事件分发_水平滑动和垂直冲突解决
    MPAndroidChart market右边显示不全问题
    SimpleDateFormat 取当前周的周一和周日的日期,当前月第一个和最后一天的日期
    Callable,Runnable比较及用法
    Android系统启动流程
    debug-stripped.ap_' specified for property 'resourceFile' does not exist
    Theme.AppCompat.Light的解决方法
  • 原文地址:https://www.cnblogs.com/zhengxl5566/p/10332272.html
Copyright © 2011-2022 走看看