Java多线程

【创建线程的方式】

1. 扩展Thread类:

Extend class java.lang.Thread and override run():
  class Plum extends Thread {
    public void run() {
      /* more code */
    }
  }

Plum P = new Plum();
P.start();

 

2. 实现Runnable接口:

Implement the Runnable interface, and use that class in the Thread constructor:

class Mango implements Runnable {

  public void run() { 

    /* more code */

  }

Mango m = new Mango(); 

Thread t1 = new Thread( m ); 

t1.start(); 

 

【线程的优先级】

可以通过调用Thread类的setPriority()方法改进线程优先级:final void setPriority(int level)

这里,形参level指定了调用线程的新的优先级设置。线程level的值必须在MIN_PRIORITY~MAX_PRIORITY范围内。目前,这两个常量的值分别是1和10.要将线程设置为默认优先级,可以将其指定为NORM_PRIORITY,目前它的值为5。在Thread类内部,这些优先级定义为static final的变量。可以通过调用Thread类的setPriorty()方法来获得当前的优先级设置,如下所示:final int getPriority()

 

【同步】

1. 使用同步方法:将方法用关键字synchronized修饰。当调用该方法时,调用的线程进入对象的监视器中,将对象锁定。当对象锁定时,其他线程就不能进入该方法,也不能进入该对象类定义的其他同步方法。当线程从方法返回时,监视器解除对对象的锁定,运行该对象用于下一线程。

synchronized void foo() { ... }

2. synchronized语句:synchronized块的一般形式如下所示:

synchronized(objref){

  //statements to be synchronized

}

这里,objref是需要同步的对象的引用。一旦进入了同步块,其他线程既不能调用同步方法,也不能进入objref对象指定的同步块,直到退出该块。

 

【线程通信】

因为Object类实现了方法wait()、notify()、和notifyAll(),所以这些方法是所有对象的一部分。这些方法只能在synchronized内容中调用。他们的使用方法如下:当一个线程暂时从运行状态中阻塞时,它调用wait()方法。这引起线程休眠,并释放对象的监视器,运行其他线程使用该对象。在之后的某个时间,当其他线程进入同一监视器并调用方法notify()或notifyAll()时,休眠的线程醒来。 

posted @ 2017-05-08 23:29  王勋广  阅读(125)  评论(0编辑  收藏  举报