基本概念
CPU核心数和线程数之间的关系:核心数:线程数=1:1;使用超线程技术可以达到1:2。CPU时间切片旋转机制:导致上下文切换过程的RR调度机制:程序运行资源分配的最小单元进程内部有多个线程,在运行时共享进程的资源线程。CPU调度的最小单位,线程必须根据进程存在。并行:同时处理事情的能力。同时:与单位时间相关。单位时间内处理事情的能力。
CPU -线程
并发编程的优缺点
优点:充分利用CPU的资源,加快用户响应时间,程序模块化,异步缺点:线程共享资源,容易导致冲突僵局。启动太多线程可能会导致服务器停机。Java线程
Java打开线程的方式:通过继承Thread类重写run方法。
public class usethread extends thread {
Public UseThread(String name) {
超级(名字);
}
@Override
Public void run() {
String threadName=T()。get name();
While(真){
Sy(threadName' is run!));
}
//sy(thread name ' interrput flag is ' is interrupted());
}
}
public static void main(string[]args)throws interrupted exception {
thread end thread=new usethread(' end thread ');
EndT()
}实现Runable接口,重新运行run方法
public classuse runnable implements runnable {
@Override
Public void run() {
//doSomeThing
}
public static void main(string[]args){
use runnable use runnable=new use runnable();
thread end thread=new thread(use runnable,' end thread ');
ENDT();
}
}
实现Callable接口,重新实现call方法
/*实施Callable接口以允许返回值*/
private static class use callable implements callable integer {
Private int sum
@Override
public integer call()throws exception {
//doSomeThing
}
public static void main(string[]args){
usecallableusecallable=new use callable();
futuretaskinteger future task=new futuretaskinteger(use callable);
New Thread(futureTask)。START();
}
}Java停止线程的三种方法:stop()、resume()和suspend():
Stop():可能会导致线程资源无法正确释放。Suspend():容易陷入僵局
线程如何安全地停止?
答:线程自然终止。线程运行或异常终止
注意:Java线程以协作方式运行,而不是以抢占模式运行。
Java线程中断interrupt():调用interupt()方法中断线程,而不强制终止线程。只向这个线程打了招呼。将线程的中断显示更改为true。线程是否中断由线程本身决定。
IsInterrupted()检查当前线程是否处于中断状态,并将中断状态更改为false方法。发生InterruptedException时,线程的中断标志位将重置为false,如果实际需要中断线程,则必须在catch语句块中再次调用interrupt
线程的状态
线程只有五种状态。整个生命周期就是这种状态的转换。
线程状态转换图表
线程通用方法
Run()和start() :run方法是一般物件的一般方法,只有在呼叫start()后,Java才会将系线物件对应至作业系统的实际系线,然后执行run方法。Yield():授予CPU的执行权限,并将线程从执行转变为可执行状态,但在下一个片中,线程可以选择重新执行。线程的优先级
值1-10,默认值为5,但线程的优先级不可靠,因此建议在开发过程中不要使用线程的优先级。
守护程序
如果与主线程一起死,则finally代码块不一定会运行。