java实现多线程的四种方式


实现多线程的三种方式:继承Thread类、实现Runnable接口、使用Callable和Future接口、使用线程池创建线程

一、继承Thread类,重写run方法

public class MyThread extends Thread{

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("我在听音乐");
        }
    }

    public static void main(String[] args) {

        MyThread myThread = new MyThread();
        myThread.start();
        for (int i = 0; i < 20; i++) {
            System.out.println("我在学习多线程");
        }
    }
}

二、实现Runnable接口

public class MyThread2 implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("我在听音乐");
        }
    }

    public static void main(String[] args) {

        Thread myThread = new Thread(new MyThread2());
        myThread.start();

        for (int i = 0; i < 20; i++) {
            System.out.println("我在学习多线程");
        }
    }
}

三、使用Callable和Future接口创建线程

public class MyThread4 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Test test = new Test();
        FutureTask<Integer> ft = new FutureTask<>(test);
        Thread thread = new Thread(ft);

        thread.start();
        for (int i = 0; i < 200; i++) {
            System.out.println("我在学习多线程");
        }

        //获取返回值
        ft.get();

    }

    static class Test implements Callable<Integer>{

        @Override
        public Integer call() throws Exception {
            for (int i = 0; i < 200; i++) {
                System.out.println("我在听音乐");
            }

            return null;
        }
    }
}

四、使用线程池创建线程
实现Callable接口,需要返回值类型
重写call方法,需要抛出异常
创建目标对象
创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(3);
提交执行:Future sub1 = ser.submit(test1);
获取结果:Integer integer1 = sub1.get();
关闭服务:ser.shutdownNow();

public class MyThread3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Test test1 = new Test(1);
        Test test2 = new Test(2);
        Test test3 = new Test(3);
        //创建执行服务
        ExecutorService ser = Executors.newFixedThreadPool(3);
        //提交执行
        Future<Integer> sub1 = ser.submit(test1);
        Future<Integer> sub2 = ser.submit(test2);
        Future<Integer> sub3 = ser.submit(test3);
        //获取结果
        Integer integer1 = sub1.get();
        Integer integer2 = sub2.get();
        Integer integer3 = sub3.get();
        //关闭服务
        ser.shutdownNow();

    }

    static class Test implements Callable<Integer>{

        private int a;

        public Test(int a) {
            this.a = a;
        }

        @Override
        public Integer call() throws Exception {
            for (int i = 0; i < 20; i++) {
                System.out.println("我在听音乐"+a);
            }

            return null;
        }
    }
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/281119.html

(0)
上一篇 2022年8月20日
下一篇 2022年8月20日

相关推荐

发表回复

登录后才能评论