引出 并发/高并发
简单来说,并发是指单位时间内能够同时处理的请求数。默认情况下Tomcat可以支持的最大请求数是
150,也就是同时支持150个并发。当超过这个并发数的时候,就会开始导致响应延迟,连接丢失等问
题。
影响并发的两个因素:
硬件:
CPU,内存,磁盘 网络
软件
线程数量
JVM内存分配大小
网络通讯机制(BIO,NIO,AIO)
磁盘IO
Java中的线程
public class ThreadTest extends Thread{
@Override
public void run() {
//线程会执行的指令
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run...");
}
public static void main(String[] args) {
ThreadTest threadTestDemo =new ThreadTest();
threadTestDemo.start();
System.out.println("ok");
//
ExecutorService executorService= Executors.newFixedThreadPool(10);
executorService.submit(new ThreadTest());
}
线程的生命周期
新建(new ):就是刚使用new方法,new出来的线程;
(这里的创建,仅仅是在JAVA的这种编程语言层面被创建,而在操作系统层面,真正的线程还没有被创建。只有当我们调用了 start() 方法之后,该线程才会被创建出来)
就绪(runnable):就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;
运行(running):当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;
阻塞(blocked):在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;
销毁(Terminated):如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;
interrupt()的作用
设置一个共享变量的值 true
唤醒处于阻塞(sleep/wait)状态下的线程。