What are the real advantages that D offers in multithreading?
Thiez via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jan 29 03:55:04 PST 2016
On Thursday, 28 January 2016 at 22:59:58 UTC, cym13 wrote:
> On Thursday, 28 January 2016 at 11:53:48 UTC, Russel Winder
> wrote:
>> It should be pointed out that anyone using the synchronized
>> keyword anywhere in Java code is doing concurrent and parallel
>> programming wrong. If they are using synchronized in single
>> threaded programming well, then…
>>
>> [...]
>
> I have seen you talk about this before and I too would love you
> to elaborate on the subject.
One of the most obvious problems with using `synchronized` on
methods, or using `synchronized(this)`, is that an object has no
control over its monitor. All code that can see a particular
instance can choose to synchronize on that instance, which
creates opportunities for deadlocks. This problem can be avoided
by controlling access to the monitor you use. One of the easiest
ways to control access to your monitor is by having a private
object to synchronize on (e.g. `private final Object lock = new
Object();`) instead of synchronizing on `this`. Further
improvements can be made by explicitly using one of the classes
found in java.util.concurrent.locks: this allows you to be more
explicit by, for instance, choosing a ReadWriteLock, and it
provides access to proper conditions.
Another problem with `synchronized` in Java is that it requires
all objects to contain an implicit monitor, while the vast
majority of objects will never get synchronized on: for all those
objects this is useless overhead. Sadly backwards compatibility
implies that Java will likely never be able to entirely get rid
of this overhead.
More information about the Digitalmars-d
mailing list