多线程

107 阅读1分钟

多线程的实现方式

1.继承Thread类

  • 继承Thread类,重写run()方法,创建子类对象,调用start()方法
public class ThreadDemo {
    public static void main(String[] args) {
        ThreadDemoTest threadDemoTest = new ThreadDemoTest();
        threadDemoTest.start();
        System.out.println("Thread main run...");
        
        
        //jdk8 lambda简化写法
        new Thread(() -> {
            for (int i = 0; i < 9; i++) {
                System.out.println(Thread.currentThread().getName() + " run ...");
            }
        }).start();
    }

}

class ThreadDemoTest extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 9; i++) {
            System.out.println(Thread.currentThread().getName()+ " run ...");
        }
    }
}

2.实现Runnable接口,重写run()方法,创建Thread类对象,并将Runnable接口的实现对象作为参数传给Thread的构造方法中

public class RunnableDemo {
    public static void main(String[] args) {
        Thread thread = new Thread(new RunnableDemoTest());
        thread.start();
        System.out.println("Thread main run...");

    }
}

class RunnableDemoTest implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 9; i++) {
            System.out.println(Thread.currentThread().getName() + " run ...");
        }
    }
}

3.实现Runnable接口,重写run()方法,将Callable接口的实现对象作为FutureTask的元素,并将FutureTask对象作为参数传给Thread的构造方法中

public class CallableDemo {
    public static void main(String[] args) {
        CallableDemoTest callableDemoTest = new CallableDemoTest();
        FutureTask<Object> futureTask = new FutureTask<>(callableDemoTest);//FutureTask接受线程返回的结果
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println("Thread main run...");
    }
}

class CallableDemoTest implements Callable{
    @Override
    public Object call() throws Exception {
        for (int i = 0; i < 9; i++) {
            System.out.println(Thread.currentThread().getName()+ " run ...");
        }
        return null;
    }
}

4.线程池实现

public class ThreadPoolDemo {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(2);//2个线程池对象
        RunnableThreadPoolTest runnableThreadPoolTest = new RunnableThreadPoolTest();
        executorService.submit(runnableThreadPoolTest);

        System.out.println("Thread main run...");

        CallableThreadPoolTest callableThreadPoolTest = new CallableThreadPoolTest();
        executorService.submit(callableThreadPoolTest);

        System.out.println("Thread main run...");

        executorService.shutdown();
    }

}

class RunnableThreadPoolTest implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 9; i++) {
            System.out.println(Thread.currentThread().getName() + " run ...");
        }
    }
}

class CallableThreadPoolTest implements Callable {

    @Override
    public Object call() throws Exception {
        for (int i = 0; i < 9; i++) {
            System.out.println(Thread.currentThread().getName() + " run ...");
        }
        return null;
    }
}