您的位置:首页 > 编程语言 > Java开发

Thinking in Java 第13章:并发

2015-07-13 16:12 162 查看
1、如果用interrupt()来中断一个挂起的线程,那么挂起来的时候最后使用wait()而不是sleep()。

2、线程的“优先权”能告诉调度程序该线程的重要性如何,并非优先权较低的就不能执行,即优先权不会导致死锁。优先级较低的线程仅仅是执行的频率较低。

3、setDaemon() 方法可以设置后台线程,一个后台线程派生出的子线程都是后台线程。

4、一个线程可以在其他线程智商调用join()方法,如果某个线程在另一个线程t上调用t.join(),此线程将被挂起,知道目标线程t结束才恢复。对join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法。

5、为了让多线程能够正确工作,需要采用某种方法来防止两个线程访问同一个资源。可以添加信号量,作为两个线程之间的进行通信的标志对象。Java提供关键字synchronized的形式,以为防止资源冲突提供了内置,当线程要执行被synchronized关键字保护的代码片断的时候,他将检查信号量是否存在,然后获取信号量,执行代码,释放信号量。共享资源一般是以对象形式存在的内存片断,但也可以是文件、输入/输出端口或者是打印机。要控制对共享资源的访问,得先把它包装进一个对象,然后把所有要访问这个资源的方法标记为synchronized。即,一旦某个线程处于一个标记为synchronized的方法中,那么这个线程在该方法返回之前,其他所有要调用类中任何标记为synchronized方法的线程都会被阻塞。声明:

synchronized void f() {/*....*/}

synchronized void g() {/*....*/}

在这个例子中,如果对对象调用了f(),对于同一个对象而言,只能等到f()调用结束并释放锁之后,才能调用g()

发现一个更加详细的介绍博客:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html

6、原子操作:如果问题中的变量类型是除了long或double意外的基本类型,对这种变量进行简单的复制或者返回值操作的时候,才算是原子操作。不包括long或者double的原因是因为他们比其他基本类型都要到啊。但是原子操作也容易访问到对象尚处于不稳定状态的时候。

最安全的方式是使用以下方针:

1)如果要对类中的某个方法进行同步控制,最好同步所有方法。

2)当去除方法的同步控制时,要非常小心

7、临界区:防止多个线程同时访问方法内部的部分代码而不是防止访问整个方法。通过这个方式分离出来的代码段被称为“临界区”。

synchronized(syncObject){

}

8、线程状态:

一个线程可以处于以下四种状态之一:

1)新建(new):线程对象已经建立,但还没有启动,所以它还不能运行

2)就绪(Runnable):在这种状态下,只要调度程序把时间片分配给线程,线程就可以运行。

3)死亡(Dead):线程死亡的通常方式是从run()方法返回。

4)阻塞(Blocked):线程能够运行,但有某个条件阻止它的运行,当线程处于阻塞状态时,调度机制将忽略线程,不会分配给线程任何CPU时间。一个线程进入阻塞状态,可能有如下原因:

A、调用了sleep(milliseconds)使线程进入到休眠状态,指定时间内不会运行

B、通过调用wait()使线程挂起,知道线程得到了notify()或notifyAll()消息,线程才会进入就绪状态

C、线程在等待某个输入/输出完成

9、线程之间的协作:

协作通过线程之间的”握手机制“来进行,通过Object的方法wait()和notify()来实现

调用sleep()的时候锁并没有被释放,wait()方法的确释放了锁,即wait()期间可以调用线程对象中的其他同步控制方法。

10、死锁

一个线程之间相互等待的连续循环,没有哪个线程可以继续,即”死锁“

当以下四个条件同时满足时,就会发生死锁:

1)互斥条件:线程使用的资源中,至少有一个是不能共享的

2)至少有一个进程它必须持有一个资源且正在等待获取一个当前被别的进程持有的资源

3)资源不能被进程抢占,把资源释放当作普通事件

4)必须有循环等待

11、停止进程,一般设置timer或者其他标志来告诉线程何时退出

12、中断阻塞线程:使用Thread.interrupt()方法来跳出阻塞代码

多线程的主要缺陷:

1)等待共享资源的时候性能降低

2)需要处理线程的额外CPU花费

3)糟糕的程序设计导致不必要的复杂度

4)有可能产生一些病态行为:饿死、竞争、死锁等

5)不同平台导致的不一致性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: