线程的概念
https://baike.baidu.com/item/线程/103101?fr=aladdin
线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
创建线程
创建进程主要有三种方法,一继承Thread类,二实现Runnable接口,三是实现Callable接口。
实现Callable接口和前两种方式不同的地方在于可以传递参数,不过线程实现的复杂程度相对较高。
方法一
继承Thread类
public class ThreadThread extends Thread{
@Override
public void run() {
super.run();
System.out.println("----------" + Thread.currentThread().getName() + "----------");
}
}
实例化运行方法:
ThreadThread threadThread = new ThreadThread();
threadThread.start();
方法二:
实现Runnable接口
public class RunnableThread implements Runnable {
@Override
public void run() {
System.out.println("----------" + Thread.currentThread().getName() + "----------");
}
}
实例化运行方法:
RunnableThread runnableThread = new RunnableThread();
Thread thread = new Thread(runnableThread);
thread.start();
方法三:
实现Callable接口
public class CallableThread implements Callable<String> {
private long waitTime;
public CallableThread(int waitTime) {
this.waitTime = waitTime;
}
@Override
public String call() throws InterruptedException {
System.out.println("----------"+Thread.currentThread().getName()+"----------");
return Thread.currentThread().getName();
}
}
实例化运行方法:
//单个callable对象调用
CallableThread callableThread = new CallableThread(100);
ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
Future<String> future = singleThreadPool.submit(callableThread);
//多个callable对象调用
CallableThread callableThread1 = new CallableThread(100);
CallableThread callableThread2 = new CallableThread(100);
FutureTask<String> futureTask1 = new FutureTask<>(callableThread1);
FutureTask<String> futureTask2 = new FutureTask<>(callableThread2);
ExecutorService mutipleThreadPool = Executors.newFixedThreadPool(2);
mutipleThreadPool.execute(futureTask1);
mutipleThreadPool.execute(futureTask2);
//线程执行完会自动回收,但是线程池一定要手动关闭
singleThreadPool.shutdown();
mutipleThreadPool.shutdown();