Java 多线程
如果在一个死去的线程上面调用start方法 会抛出java.lang.IllegalThreadStateException异常
调用Thread.sleep方法之后 线程在苏醒之后 返回到可运行状态 而并非是运行状态
线程的优先级范围在1~10之间 JVM线程调度是基于优先级的抢先调度机制
线程优先级是没有保证的 可能多个优先级映射为一个优先级
默认优先级是5 三个常量分别是 MAX_PRIORITY MIN_PRIORITY NORM_PRIORITY
Thread.yield() 是让当前运行线程回到可运行状态 以允许具有相同优先级的其他进程获得运行机会 但是实际中无法保证yield()达到让步目的 因为让步的线程还有可能被线程调度程序再次选中。
thread.join() 是将thread线程插入当前线程 在thread线程执行完毕之后 再执行当前线程
线程睡眠时 所持有的任何锁都不会释放
线程可以获得多把锁
尽量缩小同步的范围 降低同步对并发的损害
同步静态方法 需要用类对象来进行同步
死锁的实例:
package com.basis; class Test implements Runnable { private boolean flag; public Test(boolean flag) { super(); this.flag = flag; } @Override public void run() { if (flag) { while (true) { synchronized (MyLock.locka) { System.out.println("if locka"); synchronized (MyLock.lockb) { System.out.println("if lockb"); } } } } else { while (true) { synchronized (MyLock.lockb) { System.out.println("else lockb"); synchronized (MyLock.locka) { System.out.println("else locka"); } } } } } } class MyLock { static Object locka = new Object(); static Object lockb = new Object(); } public class DeadLock { public static void main(String[] args) { Thread t1 = new Thread(new Test(true)); Thread t2 = new Thread(new Test(false)); t1.start(); t2.start(); } }