### Java并发编程基础
~~~
package com.stono.thread;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
public class MultiThread {
public static void main(String[] args) {
// 获取Java线程管理MXBean
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
// 不需要获取同步的monitor和synchronizer的信息,仅获取线程和线程堆栈信息
ThreadInfo[] dumpAllThreads = threadMXBean.dumpAllThreads(false, false);
// 遍历线程信息,仅打印线程ID和线程名称信息
for (ThreadInfo threadInfo : dumpAllThreads) {
System.out.println("["+threadInfo.getThreadId()+"]"+threadInfo.getThreadName());
}
}
}
~~~
Thread.yield()把优先权交给别的线程;
Thread.setPriotiry(1-10, 默认5)设置线程优先级,但是操作系统不认;
Thread.join(等待的毫秒数),等我多少毫秒,不设毫秒就一直等;
Java线程的六种状态:NEW, RUNNABLE, BLOCKED, WAITING(等待状态,当前线程需要等待其他线程通知或者中断), TIME_WAITING(超时等待,可以在指定时间自行返回), TERMINATED。
Java将操作系统中的运行和就绪两个状态合并称为运行状态。
中断可以理解为一个标识位属性,其他线程通过调用该线程的interrupt()方法对该线程进行中断;isInterrupted()方法可以判断自身是否被中断过;但是,一个线程sleep中,被interrupt()之后,他的中断标识就被jvm清除了;
等待/通知经典范式
~~~
synchronized(object){
while(条件不满足){
object.wait();
}
逻辑处理;
}
synchronized(object){
改变条件
object.notifyAll();
}
~~~
管道输入/输出流主要包括4种实现:PipedOutputStream、PipedInputStream、PipedReader、PipedWriter,前两种面向字节,后两种面向字符;