如何创建多线程

Posted lintianwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建多线程相关的知识,希望对你有一定的参考价值。

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"));
    }
}

 

以上是关于如何创建多线程的主要内容,如果未能解决你的问题,请参考以下文章

多个用户访问同一段代码

线程学习知识点总结

Java多线程概述及创建

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

八.多进程与多线程

线程同步-使用ReaderWriterLockSlim类