线程

线程的基本概念:

线程可以理解成一个轻量的进程,是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异常,被虚拟机捕获的方式实现中断。

 

posted @ 2021-05-04 14:43  好好的一个居士  阅读(72)  评论(0)    收藏  举报