线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。
简单来说,并发是指单位时间内能够同时处理多个请求数。默认情况下Tomcat可以支持的最大请求数是150,也就是同时支持150个并发,当超过这个并发数的时候,就会开始导致响应延迟,连接丢失等问题
硬件
cpu ,内存,磁盘,网络
软件层面
最大化利用硬件资源
线程数量,jvm内存分配大小,网络通信机制,磁盘io
并发和并行
并行是指两个或多个事件在同一时刻发生
并发是指两个或多个事件在同一时间间隔内发生,这个可以冲宏观和微观两个层面来讲,如果从微观角度来看,以线程为例,假如当前电脑的cpu是单核,但是能不能支持多线程呢?当然也是能,此时如果从是多线程运行的话,那么cpu是通过不断分配时间片的方式来实现线程切换,由于切换的速度足够快,我们很难感知到卡顿的过程
Runnable接口
Thread类
Callable/Future带返回值
网络请求分发的场景
文件导入
短信发送场景
线程的生命周期
线程的启动-》结束
阻塞
WAITNG
TIME_WAITING
BLOCKED
IO阻塞
JAVA的线程有多少种状态:6种

需要注意的是。操作系统中的线程除了去new和terminated状态,一个线程真实存在的状态,只有:
ready:表示线程已经被创建,正在等待系统调度分配CPU使用权
RUNNING:表示线程获得了CPU使用权,正在进行运算
WAITING:表示线程等待(或者说挂起来),让出cpu资源给其他线程使用
在加上新建状态和死亡状态,一共五种
new Thread.start();//启动一个线程
Thread t1=new Thread()
t1.run();//调用实例方法

线程的终止
线程什么情况下会终止
run方法执行结束
volatile jint _interrupted;// Thread.isInterrupted state
void os::interrupt(Threadthread){assert(Thread::current()==thread||Threads_lock->owned_by_self(),“possibility ofdangling
Thread pointer”);
OSThreadosthread=thread->osthread();
if(!osthread->interrupted()){
osthread->set_interrupted(true);
//设置一个中断状态
//More than one thread can get here with the same value of osthread,
//resulting in multiple notifications.We do,however,want thestore
//to interrupted() to be visible to other threads before we execute
unpark().
OrderAccess::fence();
ParkEventconst slp=thread->_SleepEvent;//如果是sleep中,唤醒
if(slp!=NULL)slp->unpark();
}
//For JSR166. Unpark even if interrupt status already was set
if(thread->is_Java_thread())
((JavaThread)thread)->parker()->unpark();
ParkEvent*ev=thread->_ParkEvent;
if(ev!=NULL)
ev->unpark();
}
设置一个共享变量的值true
唤醒处于阻塞状态下的线程。