The balking pattern is a concurrency pattern that only executes an action on an object when the object is in a particular state. For example, if an object reads ZIP files and a calling method invokes a get method on the object when the ZIP file is not open, the object would "balk" at the request. In the Java programming language, for example, an IllegalStateException might be thrown under these circumstances. In C# it would be InvalidOperationException.

There are some specialists[who?] in this field who consider balking more of an anti-pattern than a design pattern. If an object cannot support its API, it should either limit the API so that the offending call is not available, or so that the call can be made without limitation. It should:

  • Be created in a "sane state";[further explanation needed]
  • not make itself available until it is in a sane state;
  • become a facade and answer back an object that is in a sane state.

Usage

edit

Objects that use this pattern are generally only in a state that is prone to balking temporarily but for an unknown amount of time.[citation needed] If objects are to remain in a state which is prone to balking for a known, finite period of time, then the guarded suspension pattern may be preferred.

Implementation

edit

Below is a general, simple example for an implementation of the balking pattern.[1] As demonstrated by the definition above, notice how the "synchronized" line is utilized. If there are multiple calls to the job method, only one will proceed while the other calls will return with nothing. Another thing to note is the jobCompleted() method. The reason it is synchronized is because the only way to guarantee another thread will see a change to a field is to synchronize all access to it. Actually, since it is a Boolean variable, it could be left not explicitly synchronized, only declared volatile - to guarantee that the other thread will not read an obsolete cached value.

public class Example {
    private boolean jobInProgress = false;

    public void job() {
        synchronized(this) {
            if (jobInProgress) {
                return;
            }
            jobInProgress = true;
        }
        // Code to execute job goes here
        // ...
        jobCompleted();
    }

    void jobCompleted() {
        synchronized(this) {
            jobInProgress = false;
        }
    }
}

See also

edit

References

edit
  1. ^ Grand, Mark (2002). Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition. Indianapolis, Ind: John Wiley & Sons.


📚 Artikel Terkait di Wikipedia

Concurrency pattern

A concurrency pattern is a software design pattern that supports concurrent processing. Examples include: Active object Balking pattern Barrier Double-checked

Guarded suspension

suspension will be indefinite or for an unacceptably long period, then the balking pattern may be preferred. In Java, the Object class provides the wait() and

Software design pattern

A software design pattern describes a reusable solution to a commonly needed behavior in software. A design pattern is not a rigid structure to be copied

Readers–writer lock

called seqlock. Semaphore (programming) Mutual exclusion Scheduler pattern Balking pattern File locking Lock (computer science) Readers–writers problem This

List of Traders episodes

Ross, the eponymous controlling shareholder of Gardner Ross, who initially balks at the idea of making him an investment banker but agrees to further consideration

Shotgun cartridge

firing at receding targets may want to fire a wide pattern immediately followed by a narrower pattern out of a single barrelled shotgun. The spread of the

Go-around

from the traditional use of traffic patterns at airfields. A landing aircraft will first join the traffic pattern/circuit and prepare for landing. If

President of the United States

Association. Retrieved November 9, 2017. Duggan, Paul (April 2, 2007). "Balking at the First Pitch". The Washington Post. p. A01. "History of the BSA Fact