多线程基础学习

原创
2020/05/28 19:00
阅读数 57

线程和进程有区别?
进程=加载上下文+执行程序+保存上下文
进程属于资源分配的最小单位,线程属于执行任务的最小单位。
线程6种状态:
1、New 尚未启动的线程的线程状态。
2、Runnable 可运行线程的线程状态,等待CPU调度。
3、Blocked 线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞
4、Time_waiting 具有指定等待时间的等待线程的线程状态。下列带超时的方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil
5、Waiting 线程等待的线程状态。
6、Temminate 终止线程的线程状态。线程正常完成执行或者出现异常。

终止线程-interrupt
如果目标线程在调用Object class的wait()、wait(long)或wait(long, int)方法、join()、join(long,
int)、join(long, int)、sleep(long, int)或sleep(long, int)方法时被阻塞。
此时线程被调用interrupt方法后,该线程的中断状态将被清除,抛出InterruptedException异常。
如果目标线程是被I/O 或者NIO中的Channel所阻塞,同样,I/O操作会被中断或者返回特殊异
常值。达到终止线程的目的。
如果以上条件都不满足,则会设置此线程的中断状态。
正确的线程中止-标志位,代码逻辑中,增加一个判断,用来控制线程执行的中止。

public class Demo4_FlatControl {
	public volatile static boolean flag = true;
	public static void main(String[] args) throws Exception {
		new Thread(() -> {
			try {
				while (flag) {
					System.out.println("运行中");
					Thread.sleep(1000L);
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}).start();
		Thread.sleep(3000L);
		flag = false;
		System.out.println("程序运行结束");
	}
}

线程的通讯方式:1、文件共享,2、网络共享 3、共享变量
线程间的协作方式:jdk提供的线程API 例如:suspend/resume wait/notify park/unpark

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部