时间:2025-09-14 11:26
人气:
作者:admin
public static class MyThread extends Thread {
@Override
public void run() {
System.out.println("this is child thread");
}
}
public static void main(String[] args){
MyThread thread = new MyThread();
thread.start();
}
public class RunnableTask extends Runnable {
public void run() {
System.out.println("Runnable!");
}
}
public static void main(String[] args){
RunnableTask task = new RunnableTask();
new Thread(task).start();
}
public class CallerTask implements Callable < String > {
public String call () throws Exception {
return "Hello,i am running!" ;
}
public static void main ( String [] args) {
//创建异步任务
FutureTask < String > task = new FutureTask < String > ( new CallerTask ());
//启动线程
new Thread ( task ) .start();
try {
//等 待 执 ⾏ 完 成 ,并获取返回结果
String result = task . get();
System.out.println ( result) ;
} catch ( InterruptedException e ) {
e.printStackTrace ();
} catch ( ExecutionException e ) {
e.printStackTrace ();
}
}
}

| 状态 | 说明 |
| NEW | 初始状态:线程被创建,还没调用start方法 |
| RUNNABLE | 运行状态:就绪 + 运行 |
| BLOCKED | 阻塞状态:阻塞于锁 |
| WAITING | 等待状态:等待其他线程做出一定动作(通知或中断) |
| TIME_WATING | 超时等待:指定时间自行返回 |
| TERMINATED | 终止状态:已经执行完毕 |

CPU资源分配采用时间片轮转,也就是给每个线程分配一个时间片,线程在时间片内占用CPU执行任务。当线程使用完时间片后,就会处于就绪状态并让出CPU让其他线程用,这就是线程上下文切换。
Java中的线程分为两类:daemon线程(守护线程)和user线程(用户线程)
在JVM启动时会调用main函数,其所在线程就是一个用户线程。JVM内部还启动了很多守护线程,如垃圾回收线程。
守护线程和用户线程的区别是,当最后一个非守护线程结束时,JVM会正常退出(此时不管当前是否存在守护线程)。
PipedOutputStream,另一个线程从 PipedInputStream 读取。适合流式传输。
上一篇:Spring篇知识点(1)
下一篇:Java并发编程(3)