多线程优先级及同步

十度 Java 2016年03月13日 收藏
6、线程的优先级
  Thread.MIN_PRIORITY = 1
  Thread.NORM_PRIORITY = 5
  Thread.MAX_PRIORITY = 10
7、线程同步
  ①使用同步代码块
    
public class ThreadDemo {
  public static void main(String[] args) {
    MyThread thread1=new MyThread();
    new Thread(thread1).start();
    new Thread(thread1).start();
    new Thread(thread1).start();
    new Thread(thread1).start();
  }
}
class MyThread implements Runnable{
  private int ticket=5;
  public MyThread(){
  }
public void run(){
    for(int i=0;i<100;i++){
      synchronized (this) {
        if(ticket>0){
        try {
        Thread.sleep(1000);
        } catch (InterruptedException e) {
        e.printStackTrace();
        }
    System.out.println("卖出了第"+ticket--+"张票");
        }
    }
  }
  }
}

  ②使用同步方法

public class ThreadDemo {
    public static void main(String[] args) {
      MyThread thread1=new MyThread();
      new Thread(thread1).start();
      new Thread(thread1).start();
      new Thread(thread1).start();
      new Thread(thread1).start();
    }
}
class MyThread implements Runnable{
    private int ticket=5;
    public void run(){
      for(int i=0;i<100;i++){
      this.sale();
    }
}
public synchronized void sale(){
    if(ticket>0){
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    System.out.println("卖出了第"+ticket--+"张票");
    }
  }
}

8、wait 和 sleep 比较

  ①wait别的线程可以访问锁定对象,它是Object类的方法,注意:调用wait方法的时候必须锁定该对象

  ②sleep时别的线程不可以访问锁定对象,它是Thread类的方法