How to make a method thread safe without using synchronized
keyword?

Answers were Sorted based on User's Feedback



How to make a method thread safe without using synchronized keyword?..

Answer / jitender arora

By using a flag to determine that the method is in use by a
running thread.

Class A{

private boolean inUse = false;

public methodA(){
if(!inUse){
inUse = true;
...
...
...
inUse = false;
}
}

}

Is This Answer Correct ?    18 Yes 12 No

How to make a method thread safe without using synchronized keyword?..

Answer / isak

Use ReentrantLock which belongs to java.util.concurrent.locks.ReentrantLock package
Below is the method printCount() which has synchronised without using synchronised.


Lock lock = new ReentrantLock();

public void printCount(String threadName){
lock.lock();
try {
for(int i = 5; i > 0; i--) {
System.out.println("Counter --- " + i +" With thread : "+threadName);
}
} catch (Exception e) {
System.out.println("Thread interrupted.");
}finally{
lock.unlock();
}
}

Is This Answer Correct ?    3 Yes 0 No

How to make a method thread safe without using synchronized keyword?..

Answer / rajib

by implementing SingleThreadModel interface.

Is This Answer Correct ?    4 Yes 2 No

How to make a method thread safe without using synchronized keyword?..

Answer / aravinda reddy

Oneway of doing By making all the variables and methods in
the class as final.

Is This Answer Correct ?    3 Yes 3 No

How to make a method thread safe without using synchronized keyword?..

Answer / venkat

Hi Jitender,

Here the scnroniziation is happening in methodA(){}
But the same thread(Thread-0) is executing even second time
also. Could you please clarify the same.

Here is the output.

Constructor..
Thread started..Thread-0
processing....Thread-0
Thread started..Thread-1
complete..Thread-0
processing....Thread-0
complete..Thread-0

Regards,
Venkat

Is This Answer Correct ?    0 Yes 1 No

How to make a method thread safe without using synchronized keyword?..

Answer / dandhar

Make the "inUse" variable to static.

private static boolean inUse = false;

Is This Answer Correct ?    2 Yes 3 No

How to make a method thread safe without using synchronized keyword?..

Answer / praveen t chand

hi

this is the correct answer for this question



public class A implements Runnable {

/**
* @author jeetendra.arora
* @param args
*/

A(){

System.out.println("Constructor..");
}
public static void main(String[] args) {

A a = new A();


Thread t1 = new Thread(a,"a thead");
t1.start();

Thread t2 = new Thread(a,"b thead");
t2.start();


}
private boolean inUse = false;
private boolean f= false;
public void run(){
System.out.println("Thread
started.."+Thread.currentThread().getName());

while(!f)
if(!inUse){
methodA();
f= true;
}
}


public void methodA(){

inUse = true;

System.out.println("processing...."+Thread.currentThread().getName());

try{
Thread.currentThread().sleep(3000);
}
catch (Exception e){
System.out.println("Exp");
}



System.out.println("complete.."+Thread.currentThread().getName());
inUse = false;

}

}

regards
praveen

Is This Answer Correct ?    0 Yes 2 No

How to make a method thread safe without using synchronized keyword?..

Answer / jitender arora

Corrected my previous answer:

public class A implements Runnable {

/**
* @author jeetendra.arora
* @param args
*/

A(){

System.out.println("Constructor..");
}
public static void main(String[] args) {

A a = new A();


Thread t1 = new Thread(a);
t1.start();

Thread t2 = new Thread(a);
t2.start();


}

public void run(){
System.out.println("Thread
started.."+Thread.currentThread().getName());

Thread.currentThread().getName();
methodA();
}
private boolean inUse = false;

public void methodA(){
while(!inUse){

inUse = true;
System.out.println
("processing...."+Thread.currentThread().getName());

try{
Thread.currentThread().sleep(3000);
}
catch (Exception e){
System.out.println("Exp");
}

System.out.println
("complete.."+Thread.currentThread().getName());

}
inUse = false;
}

}

Is This Answer Correct ?    5 Yes 9 No

Post New Answer

More Core Java Interview Questions

Is it possible to define a method in java class but provide it’s implementation in the code of another language like c?

0 Answers  


what is mutability?which one is mutable String or StringBuffer?and why?give examples of each which shows the mutability of each String or StringBuffer

4 Answers   IBM, Zenon,


What is autoboxing and unboxing?

0 Answers  


Is JRE required to compile Java files ?

4 Answers   HCL,


What is api in java?

0 Answers  






Why main() method is public, static and void in java ?

0 Answers  


What is meant by 'bit masking' in java?

0 Answers   DELL,


When we r go to abstract class and when we go to Interface? i have confusion this question while in interview plz clarify

3 Answers   HCL, Photon,


What are hot spots in Java programming?

1 Answers  


diff b/w sleep(1000) and wait(1000)?

4 Answers   Huawei,


Is sizeof a preprocessor?

0 Answers  


What is an array and a vector? How they different from each other?

4 Answers  


Categories