JAVA并发编程基础篇(一)
并发与并行
并发:两个或多个事件在同一时间间隔内发生。
并行:两个或多个事件在同一时刻发生。
举个例子:4*400米比赛,不同队伍是并行,同一队伍是并发,映射到计算机中,交接棒相当于CPU资源,不同的CPU是并行,单核CPU交替执行不同的进程是并发。
扩展:默认情况下Tomcat可以支持的最大请求数是150,也就是说可以同时支持150个并发。
线程
线程的定义
线程(thread)是操作系统能够进行运算调度的最小单位,一个进程至少包含一个线程。
线程的创建
-
继承 Thread 类
-
实现 Runnable 接口
-
Callable/Future 带返回值
线程的状态
线程有6种状态:
- New:新创建
- Runnable:运行
- Blocked:阻塞
- Waiting:等待
- Timed Waiting:计时等待
- Terminated:终止
扩展:操作系统(Operating System,简称OS)
线程的启动
-
new Thread().start(); //启动一个线程
-
Thread t = new Thread(); t.run();
线程的终止
-
run方法执行结束
-
stop() 强制终止,不建议使用
-
new Thread().interrupt(), 中断,设置interrupt=true;
public class InterruptDemo implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()){ try { TimeUnit.SECONDS.sleep(200); } catch (InterruptedException e) { // interrupt复位 = false e.printStackTrace(); // 继续中断或抛异常 Thread.currentThread().interrupt(); //再次中断 } } System.out.println("end"); } public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new InterruptDemo()); thread.start(); Thread.sleep(100); //睡眠,保证线程进入循环 thread.interrupt(); //中断 interrupt=true } }
扩展
怎么查看进程:
- jsp 查看当前进程的PID
- jstack+PID 查看堆栈信息