zoukankan      html  css  js  c++  java
  • 如何创建多线程

    1.继承 Thread类,并重写run()方法:

    public class Thread001 extends Thread{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"我是子线程");
        }
    
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName()+"我是主线程");
            new Thread001().start();
        }
    }

    2.实现Runnable接口,并重写run()方法:

    public class Thread002 implements Runnable{
        public void run() {
            System.out.println(Thread.currentThread().getName()+"我是子线程1");
        }
    
        public static void main(String[] args) {
            new Thread(new Thread002()).start();
        }
    }

    3.使用内部类:

    public class Thread0022{
        public static void main(String[] args) {
            //写法1
            new Thread(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"我是子线程1");
                }
            }).start();
            //写法二:使用lambda表达式
            new Thread(() -> System.out.println(Thread.currentThread().getName()+"我是子线程2")).start();
        }
    }

    4.可以带返回结果的线程Callable:

    但是这种方式的话因为要等待子线程返回结果,所以你它的用时跟直接一个方法走没啥区别。

    public class MyCallback implements Callable<String> {
        @Override
        public String call() throws Exception {
            try{
                Thread.sleep(3000);
            }catch (Exception e){}
            return "子线程返回了!";
        }
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            System.out.println("主线程开始了!");
            FutureTask<String> futureTask = new FutureTask<>(new MyCallback());
            new Thread(futureTask).start();
            System.out.println("这是---》》》"+futureTask.get());
            System.out.println("主线程结束了!");
        }
    }

    5.线程池:

    public class Thread003 {
        public static void main(String[] args) {
            ExecutorService executorService = Executors.newCachedThreadPool();
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("我是"+Thread.currentThread().getName()+"线程池1");
                }
            });
            //写法2:使用lambda表达式
            executorService.execute(() -> System.out.println("我是"+Thread.currentThread().getName()+"线程池2"));
        }
    }
  • 相关阅读:
    Android Camera子系统之Linux C应用开发人员View
    【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,而且在AVD中浏览sdcard的文件
    HDU 2196 Computer(求树上每一个节点到其他点的最远距离)
    HDU 4081 Qin Shi Huang&#39;s National Road System 最小生成树
    scala 变量定义,基本操作符
    mybatis or
    Nginx
    hessian协议原理
    同一台电脑上装两个或两个以上的tomcat服务器
    端口号
  • 原文地址:https://www.cnblogs.com/LinTianwen/p/13376646.html
Copyright © 2011-2022 走看看