The tenth chapter of Java concurrent programming to avoid active critical reading notes

Source: Internet
Author: User


One, deadlockThe so-called deadlock: refers to two or more than two processes in the process, because of the contention for resources caused by a mutual waiting phenomenon, if there is no external force, they will not be able to proceed.

Encyclopedia Encyclopedia

When more than two computing units, both sides are waiting for the other side to stop execution, to obtain system resources, but no one side early exit. Such a situation. is called a deadlock. Wikipedia


1. Sequential deadlocks have a minimum of two locks. A thread acquires a lock to get the B lock talent to operate, while another thread acquires a B lock, need to obtain a lock talent run operation, in which case easy appears sequential deadlock.


public class Leftrightdeadlock {Private Final object left = new Object ();p rivate Final Object right = new Object ();p ublic void LeftRight () {synchronized (left) {synchronized (right) {//DoSomething ()}}} public void Rightleft () {synchronized (right) {synchronized (left) {//DoSomething ()}}}}



2. Dynamic Lock sequence deadlock
public void TransferMoney (account Fromaccount, account Toaccount, Dollaramount anount) throws insufficientresourcesexception {synchronized (fromaccount) {synchronized (toaccount) {if (Fromaccount.getbalance (). CompareTo (amount) < 0) {throw new Insufficientresourcesexception ();} else {fromaccount.debit (anount); Toaccount.credit (Anount);}}}

A:transfermoney (MyAccount, Youraccount, 10);
B:transfermoney (Youraccount, MyAccount, 20);

The condition of all locks by the externally passed-in variables, however, can be seen by the variables passed in, in which case a thread acquires a myaccount lock in the request Youraccount lock, while another thread acquires the Youraccount lock on the opposite side of the request MyAccount lock.
Private static Final Object Tielock = new Object ();p ublic void TransferMoney (Final account Fromaccount, final account TOAC Count, final Dollaramount anount) throws Insufficientresourcesexception {class helper{public void Transfer () throws Ins ufficientresourcesexception {if (Fromaccount.getbalance (). CompareTo (amount) < 0) {throw new insufficient        Resourcesexception ();        } else{fromaccount.debit (Anount); Toaccount.credit (Anount); }}}int Fromhash = System.identityhashcode (fromaccount); int tohash = System.identityhashcode (ToAccount); if (FromHash &l T        Tohash) {synchronized (Fromaccount) {synchronized (toaccount) {new Helper (). Transfer (); }}} and else if (Fromhash > Tohash) {synchronized (Toaccount) {synchronized (fromaccount) {new H        Elper (). Transfer ();                }}} else {synchronized (Tielock) {synchronized (Fromaccount) {synchronized (toaccount) { New Helper (). TraNsfer (); }        }    }}}

3. Deadlocks that occur between collaboration objects
Class Taxi {Private point location, destination;private final Dispatcher dispatcher;public Taxi (Dispatcher Dispatcher) { C0/>this.dispatcher = Dispatcher;} Public synchronized Point GetLocation () {    return location;} Public synchronized void setlocation {    this.location = location;    if (location.equals (destination)) {        dispatcher.notifyavaliable (this);}}    } class Dispatcher {private Final Set <Taxi> taxis;private Final set<taxi> avaliabletaxis;public Dispatcher () {    taxis = new Hashset<taxi > ();    Avaliabletaxis = new hashset<taxi> ();} Public synchronized void notifyavaliable (Taxi Taxi) {    avaliabletaxis.add (Taxi);} Public synchronized Image GetImage () {    image image = new Image ();    for (Taxi t:taxis) {        image.drawmarker (t.getlocation ());    }    return image;}}

4. Open call--to be filled
5. Resource Deadlockexternal locks are often overlooked and lead to deadlocks, such as database locks
Two, the avoidance of the deadlock with the diagnosis 1. Support for timed deadlocksThere are some means of preventing deadlocks. For example, lock TRYLOCK,JDK 7 introduced in the Phaser and so on.

2. Parsing deadlocks with thread dump information



Third, other active critical 1. Hunger 2. Poor responsiveness 3. Live lock


Iv. Use of a data structure that supports CAs. Avoid locks, such as: Atomicxxx, Concurrentmap, copyonwritelist, concurrentlinkedqueue deadlocks are often not entirely avoidable, and ostrich strategies are used by very many infrastructure frameworks. There are methods for detecting deadlocks

v. References: Win Shaojin-Java Concurrency Programming tutorial


Java concurrency Programming the tenth chapter to avoid active critical reading notes

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.