Java多线程编程核心技术

根据 整理
1.停止线程
使用退出标志 , 使线程正常退出 , 也就是当run完成后线程终止
使用stop强行终止线程 , 但不推荐使用 , 已经作废
使用中断线程
2.停止不了的线程
调用给当前线程打一个停止标记
3.判断线程是否是停止状态
():是否已经被中断 , 执行后将具有状态标志清除为false
():是否已经中断 , 但不清除状态标记
4.在sleep状态下终止线程 , 会进入语句 , 并且清除状态值 , 变为false
5.使用停止线程
()与结合

Java多线程编程核心技术

文章插图
6.暂停线程
()暂停线程
():恢复线程的执行
以上两个方法:
1.独占:容易造成公共的同步对象的独占 , 使得其他线程无法访问公共共同对象 。
2.不同步:会因线程的暂停而导致数据不同步
7.yield()
放弃当前的CPU资源 , 将它让给其他的任务去占用CPU执行时间 , 但放弃的时间不确定 , 有可能刚刚放弃 , 马上又获得CPU时间片
8.线程优先级
默认为5 , 
最高10 ,  最低1
如何小于1或者大于10 , 抛出tion()
优先级的继承特性:
线程A启动线程B , 则B的优先级与A是一样的 。
优先级的规则性:
高优先级的线程总是大部分先执行完 , 但不代表高优先级的线程全部先执行完 。
当线程优先级的等级差距较大时 , 谁先执行完和代码的调用顺序无关 。
优先级的随机性:
高优先级的线程并不一定每次都优先执行完 。
9.守护线程
线程分为守护线程和用户线程
当进程中不存在非守护线程 , 则守护线程自动销毁 。
典型的守护线程是垃圾回收线程 , 当进程中不存在非守护线程 , 则垃圾回收线程也就没有必要存在了 。
只要JVM中存在任何一个非守护线程没有结束 , 守护线程就在工作 , 只有当最后一个非守护线程结束时 , 守护线程才随着jvm一起结束 。
.();
10.同步方法
10.1 方法内的变量为线程安全:非线程安全的问题存在于实例变量中 , 如果是方法内部的私有变量 , 则不存在“非线程安全问题”
10.2 实例变量非线程安全
如果多个线程共同访问1个对象中的实例变量 , 则有可能出现“非线程安全”问题 。
如果对象仅有一个实例变量 , 则有可能出现覆盖的情况 。
调用关键字声明的方法一定是排队运行的 , 只有共享的资源才需要同步化 , 如果不是共享资源 , 根本没有同步的必要 。
脏读是可以通过解决的 。
1.当线程A调用对象加入关键字的X方法时 , A线程就获得了X方法锁 , 更准确的讲 , 是获得了对象锁 , 所以其他线程必须等A线程执行完才可以调用X方法 , 但B线程可以随意调用其他非同步方法 。
2.当A线程调用对象加入关键字X方法 , A就获得了X方法所在的对象的锁 , 所以其他线程必须等A执行完才可以调用X方法 , 而B线程如果调用声明了的非X方法 , 必须等A线程将X方法执行完 , 也就是释放对象锁后才可以调用 , 这时A线程已经执行了一个完整的任务 , 就不会出现脏读的情况 。
10.3 锁重入