Difference between ReentrantLock and AbstractQueuedSynchronizer [closed] - java

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
Can someone give me some examples to distinguish ReentrantLock and AbstractQueuedSynchronizer, under what circumstances, should I go for ReentrantLock, verse vice, when should I use AbstractQueuedSynchronizer.

when should I use AbstractQueuedSynchronizer
Probably never. Look at my answer in the link of the comments to see uses of AQS. AQS is a class that offers support for concurrent constructs. If you are not writing some kind of of lower level concurrency tool you should never use AQS. Most, if not all, barriers offered in j.u.c should suffice.
Can someone give me some examples to distinguish ReentrantLock and
AbstractQueuedSynchronizer
A better question is distinguish the differences between the ReentrantLock and
Semaphore
CyclicBarrier
ReentrantReadWriteLock
CountDownLatch
Each of these classes utilize AQS for concurrency support.

Related

JavaFX Task vs plain old Thread, what are the differences? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 5 years ago.
Improve this question
Aside from the properties to know the state of the task and the call backs (completed, failed, etc), is there any other differences of using JavaFX Task over a plain old Java Thread with a lambda?
I'm not asking what's good or bad, I'm not asking what you think I should do, I'm asking for the objective factual differences that would happen when using a Task instead of a plain lambda to run a background thread in a JavaFX application. Aside from the the differences that I already mentioned.
On the Oracel's tutorial for concurrency, in the section titled "Why Use the javafx.concurrent Package?" it says:
If you have special requirements or need extra power over the code, implementing a background worker by creating a Runnable object and a new thread is an appropriate way to go.
other than that, all the reasons for using a Task are equally applicable to a Runnable and I don't see what special requirements or extra power one gains, I also don't see what you lose, if anything, aside from state and callbacks, when choosing Runnable over Task. What I do see is that using Task is much more verbose:
new Thread(this::doSomething).start();
vs
new Thread(new Task<Void>() {
#Override
protected Void call() throws Exception {
doSomething();
return null;
}
}).start();
My concern would be the some unexpected side effect from choosing a shorter more concise version of the code that according to Oracle, should only be used in special cases.
doSomething is a variety of different activity on this example and I'm interested in facts that are agnostic to what they do. In my case, it's mostly network requests that then update the UI by using Platoform.runLater.

Performence Java Multithreading, create new Object or use sychronized [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
I have a server with multithreading.
Each connection has it's own thread. The thread sometimes needs to access some methods from an Object and the method could be only called once at a time. So what would be better for the performance: Just to create a new object for every thread when it need to use it. Or sharing one global object which has synchronized methods?
synchronizing would not lead you to better performance. It could potentially make the performance worse if done incorrectly.
You are not showing any code so there is no way for us to give you any advice on what to focus on optimizing.
As a general advice:
1) Avoid any state if possible. This way synchronized is not needed
2) Make state immutable if the object needs to have a state. This way you don't care about synchronizing and avoid tedious bugs
3) If object creation is cheap then just do that using (2) if possible
4) If object creation is heavy look into singleton pattern and try to use locks on the methods.
And about
Each connection have its own Thread
Make sure you use a thread pool

java multithreading method that can acess atmost 3 threads concurrently [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
Hi today in interview they asked a multi threading question that create a procedure in which there is a method getDBConnect() so that atmost 3 threads can access it concurrently. if 4th thraed try to access getDBConnect() method then 4th thread will go on wait state if anyone of 3 thread release the method getDBConnect() then 4th thread will access the getDBConnect() method using simple thread or executor thread.
Please help me to understand how can i make program of multi threading so that above criteria should be satisfied.
I'm not going to write code for you. But I can hint what this question is about. There is very interesting primitive of multithreading synchronization called Semaphore. JDK contains detailed description and sample of use https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html

Why I cannot override method wait() in Java? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I find the method wait() in the class Object.
It is final which means that this method cannot be overriden.
Any ideas why it's final?
#Flavio - it's actually a very good question.
The reason you can't override it, of course, is that the designers made it "final".
A couple of potential reasons for this decision:
You don't want people to mess with the semantics of a fundamental operation on a fundamental class (class "Object").
Since it's "final", compilers can optimize performance (save a few cycles) by in-lining "wait()"
"final" increases the security of the Java object model by preventing malicious code from exploiting "wait()".
It is not designed to be overriden, that's why. The method wait() calls wait(long timeout) which is final and native. So the latter is not supposed to be overriden and the no-paremeter version is just final so it is not supposed to be overriden too.
If you override a very basic functionality available for all Objects then it is highly likely that you will blow up your software or ruin your colleague's day.
If you check the documentation of wait():
Causes the current thread to wait until another thread invokes the
notify() method or the notifyAll() method for this object.
it turns out that it works in tandem with notify() and notifyAll() so you can't change it without altering their functionality. Not to mention the dozens of concurrent libraries using those methods.
It has a fairly concrete implementation that does not need to be modified. The logic behind wait() should be synonymous across all objects

Concurrent Programming in Java : Future Vs Fork/Join [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 9 years ago.
Improve this question
I have learnt the concepts of Future ,Fork and Join. Can someone explain differences/similarities between these two. Where to apply which concept.
It's not really comparable.
A Future represents the result of an asynchronous computation and enables you to access the result of that computation when it's done (possibly in the future if the computation takes some time, hence the name).
A Fork/Join pool is a form of ExecutorService (task execution system) that executes its tasks using multiple threads and uses a work stealing algorithm. The result of a fork/join task is a Future.

Categories