大龄屌丝自学笔记--Java零基础到菜鸟--034

Lock锁,死锁,线程组,线程池,定时器,练习题

 

1、Lock锁(接口)

lock();

unlock();

ReentrantLock是Lock的实现类。

 

2、死锁

同步的缺点:效率低,容易产生死锁。

死锁:两个或两个以上的线程,在争夺资源的过程中,发生的一种相互等待的现象。

 1 public class MyLock {
 2     public static final Object objA=new Object();
 3     public static final Object objB=new Object();
 4 }
 5 
 6 public class DieLock extends Thread{
 7 
 8     private boolean flag;
 9 
10     public DieLock(boolean flag){
11         this.flag=flag;
12     }
13 
14     @override
15     public void run(){
16         if(flag){
17             synchronized(MyLock.objA){
18                 System.out.println("if A");
19                 synchronized(MyLock.objB){
20                     System.out.println("if B");
21     
22                 }
23             }
24         }else{
25             synchronized(MyLock.objB){
26                 System.out.println("else B");
27                 synchronzied(MyLock.objA){
28                     System.out.println("else A");
29                 }
30             }
31         }
32     }
33 }
34 
35 public class Fin{
36     public static void main(String[] args){
37         DieLock dieLock1=new DieLock(true);
38         DieLock dieLock2=new DieLock(false);
39         dieLock1.start();
40         dieLock2.start();
41     }
42 }
43 
44 //死锁

 

3、线程组

ThreadGroup类,可以对一批线程进行分类管理。

getThreadGroup();

 

4、线程池

Executros类,启动新线程成本太高,可以利用献线程池提高线程使用效率(用完后回收)。

newCachedThreadPool();

newFixedThreadPool();

newSingleThreadExecutor();

以上三个方法的返回值为ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或Callable对象代表的线程。

submit();

shutdown();

 

 

5、定时器

Timer类:schedule();

TimerTask类:run(); , cancel();

 

6、练习题

(1)多线程有哪几种实现方式?

三种:继承Thread类,实现Runnable接口,实现Callable接口(结合线程池使用)。

 

(2)同步有哪几种实现方式?

两种:同步代码块,同步方法。

 

(3)启动一个线程是run()还是start(),两者的区别是什么?

start()。

run():封装了被线程执行的代码,直接调用,相当于普通方法的调用。

start():启动线程,并由JVM自动调用run()方法。

 

(4)sleep()和wait()的区别是什么?

sleep():必须指定时间;不释放锁。

wait():可以指定时间,也可以不指定时间;释放锁。

 

(5)为什么wait()、notify()、notifyAll()都定义在Object类中?

因为这些方法的调用,依赖于锁对象,而同步代码块的锁是任意锁,所以定义在可以代表任意对象的Object类中。

posted @ 2015-10-13 19:21  ilmari  阅读(183)  评论(0编辑  收藏  举报