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();
    }
}

 

posted on 2013-11-26 23:54  Knuth_档案  阅读(240)  评论(0编辑  收藏  举报

导航