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"));
        }
    }
  • 相关阅读:
    Hibernate 补充 ManyToOne、OneToMany、OneToOne的使用例
    Lint found fatal errors while assembling a release target
    5、jeecg 笔记之 minidao 条件判断
    4、jeecg 笔记之 自定义显示按钮 (exp 属性)
    restful api
    我学不动了...
    6、Flutter Error waiting for a debug connection: ProcessException: adb did not report f(转)
    5、Flutter 实现 ViewPager、bottomNavigationBar 界面切换
    4、Flutter 采坑记录篇二_依赖库不兼容
    3、Finished with error: FormatException: Bad UTF-8 encoding 0xc3 (at offset 169)
  • 原文地址:https://www.cnblogs.com/LinTianwen/p/13376646.html
Copyright © 2011-2022 走看看