🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 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,前两种面向字节,后两种面向字符;