线程创建方式

方式总结

1.继承Thread类,重写run();

2.实现Runnable接口,实现run()方法;

3.实现Callable接口,配合FutureTask,可拿到返回值

4.利用线程池,Executors创建线程池

 

 代码展示

1.继承Thread类,重写run();

package com.watero.base.thread;

/**
 * 继承Thread类,创建将多线程
 */
public class ThreadTest extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + "---" + i);
            }
        }
    }

    public static void main(String[] args) {
        Thread.currentThread().setName("主线程");
//        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        System.out.println(Thread.currentThread().getPriority());
        ThreadTest tt = new ThreadTest();
        tt.setName("线程1");
        System.out.println(tt.getPriority());
//        tt.setPriority(Thread.MAX_PRIORITY);
        System.out.println(Thread.currentThread().getName());
        tt.start();
        for (int i = 0; i < 100000; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + "---" + i);
            }
        }
    }
}

 

 

2.实现Runnable接口,实现run()方法;

class Test implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + "---" + i);
            }
        }
    }

    public static void main(String[] args) {
        Test test = new Test();
        Thread t1 = new Thread(test);
        t1.start();
    }
}

  

 

3.实现Callable接口,配合FutureTask,可拿到返回值

package com.watero.base.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
/**
 * 实现Callable接口   创建线程   具有返回值
 */
public class CallableTest implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += i;
        }
        return sum;
    }
}
class Demo {
    public static void main(String[] args) {
        CallableTest ct = new CallableTest();
        FutureTask futureTask = new FutureTask<Integer>(ct);
        new Thread(futureTask).start();
        Integer integer = null;
        try {
            integer = (Integer) futureTask.get();
            System.out.println(integer);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

 

 

 

4.利用线程池,Executors创建线程池

 

package com.watero.base.thread.pool;

import java.util.concurrent.*;

/**
 * 线程池
 */

public class ThreadPool {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        //  executorService.execute(); 适用于Runnable
        // executorService.submit(); 适用于Callable
        PrintNumber pn = new PrintNumber();
        GetTotal gt = new GetTotal();
        executorService.execute(pn);
//        executorService.execute(pn);
        Future<Integer> submit = executorService.submit(gt);
        try {
            Integer integer = submit.get();
            System.out.println(integer);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

//        executorService.shutdown();//关闭线程池

    }
}

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

class GetTotal implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += i;
        }
        return sum;
    }
}

 

posted @ 2021-04-19 12:54  watero  阅读(51)  评论(0)    收藏  举报