1 线程和进程的区别

2 简述线程的状态及其转换

3 简述线程的两种创建方式以及它们的区别

4 下列关于线程API说法正确的是

A.Thread类的静态方法currentThread方法可以用于获取运行当前代码片段的线程。

B.Thread类的getName方法返回该线程的名称。

C.Thread类的getId方法返回该线程的标识符。

D.Thread类的getPriority方法获取线程的状态

5 编写计时线程,每隔5秒钟输出当前的日期-时间,主线程结束后计时完毕

6 下列关于sleep和yield说法正确的是

A.sleep方法是用于阻塞线程,直到被中断为止,yield方法是用于获取CPU时间片段。

B.sleep方法用于让出CPU时间片段,yield方法用于使线程阻塞指定毫秒数。

C.sleep方法用于使线程阻塞指定毫秒数,yield方法用于让出CPU时间片段。

D.sleep方法用于获取CPU时间片段,yield用于阻塞线程,直到被中断为止。

7 已知类Foo代码如下,下列锁机制不合适的是

Foo类代码如下所示:

class Foo {
  private List list1 = new ArrayList();
  private List list2 = new ArrayList();
  public void add_1(Object obj) {
         list1.add(obj);
  }
  public void remove(Object obj) {
    list1.remove(obj);
  }
  public void add_2(Object obj){
    list2.add(obj);
  }
}

下列锁机制不合适的是()。

A.

class Foo {
  private List list1 = new ArrayList();
  private List list2 = new ArrayList();
  public void add_1(Object obj) {
    synchronized(this) {
         list1.add(obj);
    }
  }
  public void remove(Object obj) {
     synchronized(this) {
         list1.remove(obj);
     }
  }
  public void add_2(Object obj){
     synchronized(this) {
         list2.add(obj);
     }
  }
}

B.

class Foo {
  private List list1 = new ArrayList();
  private List list2 = new ArrayList();
  public void add_1(Object obj) {
    synchronized(list1) {
         list1.add(obj);
    }
  }
  public void remove(Object obj) {
     synchronized(list1) {
         list1.remove(obj);
      }
  }
  public void add_2(Object obj){
     synchronized(list2) {
         list2.add(obj);
     }
  }
}

C.

class Foo {
  private List list1 = new ArrayList();
  private List list2 = new ArrayList();
  public synchronized void add_1(Object obj) {
         list1.add(obj);
  }
  public synchronized  void remove(Object obj) {
    list1.remove(obj);
  }
  public synchronized void add_2(Object obj){
    list2.add(obj);
  }
}

D.

class Foo {
  private List list1 = new ArrayList();
  private List list2 = new ArrayList();
  public void add_1(Object obj) {
    synchronized(this) {
         list1.add(obj);
    }
  }
  public void remove(Object obj) {
     synchronized(this) {
         list1.remove(obj);
    }
  }
  public void add_2(Object obj){
     synchronized(obj) {
         list2.add(obj);
     }
  }
}