线程
线程的基本概念:
线程可以理解成一个轻量的进程,是cup的最小执行单元,所以线程的创建,是操作系统os实现的,java虚拟机只是调用,这一点和数据库的事务一样。
并发和并行
并发,就是日常提到的高并发,指Server可以同时接收多个请求
并行,一个单核cpu也是可以通过资源切换达到并发,但是始终只有一个线程在真正执行,并行,就是存在一个以上的cpu能够达到的效果
多线程最终目标就是提高服务的吞吐量
服务的吞吐量从硬件因素看:cpu,内存,网络,磁盘
对应的软件因素:线程,jvm,网络通信机制BIO,NIO 磁盘io
线程的实现方式:
工作中,都是通过线程池获得线程,线程的管理,创建,销毁都交给线程池。
自己实现的话:
public class ThreadDemo implements Runnable{
@Override
public void run() {
}
}
public class ThreadDemo extends Thread{
@Override
public void run() {
}
public static void main(String[] args) {
ThreadDemo demo = new ThreadDemo();
demo.start();
}
}
public class ThreadDemo implements Callable<String> {
@Override
public String call() throws Exception {
return "回调方法";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
ThreadDemo demo = new ThreadDemo();
ExecutorService executorService = Executors.newFixedThreadPool(1);
Future<String> future = executorService.submit(demo);
String result = future.get();
}
}
线程的状态:
NEW->Runable->WAITING(TIME_WAITING)->BLOCKED-terminated
WAITING,TIME_WAITING,BLOCKED都是线程的阻塞状态,阻塞带时间参数的就是TIME_WAITING,sleep(),wait,park()
将线程从阻塞状态中唤起,notify()/notifyAll()
线程中断
stop()暴力方法肯定不支持
interrupt(),通过设置一个共享变量值,唤起阻塞状态的线程,做出中断响应,通过抛一个InterruptedException异常,被虚拟机捕获的方式实现中断。

浙公网安备 33010602011771号