A Java program demonstrates the busy threading issue
Supposedly, this program should give a value of 20000 for the counter, but it will give different counter values each time you run it. This happens because 2 threads are allowed to access the same variable at the same time. For example, assume the counter is at 99
-
1. Thread 1 takes the counter variable
2. Thread 2 also takes the counter variable
3. Thread 1 adds 1 to the counter, and the counter become 100.
4. Thread 2 also addes 1 to the counter but it didn’t know the counter was updated by thread 1 already, the counter is still known as 99 for thread 2, so thread 2 adds 1 to the counter and save it as 100 when in fact it should be 101.
public class BusyThread implements Runnable{ public static int counter=0; private String name; public BusyThread(String name) { this.name=name; } public void run() { int i=10000; while(i>0) { BusyThread.counter++; i--; //System.out.println(Thread.currentThread().getName()+" is adding 1"); } System.out.println(this.name+": "+BusyThread.counter); } public static void main(String args[]) throws InterruptedException { Thread t1 = new Thread(new BusyThread("Thread 1")); Thread t2 = new Thread(new BusyThread("Thread 2")); t1.start(); t2.start(); System.out.println("This is printed after thread 1 and thread 2 are started."); //Thread.sleep(5000); while(t2.isAlive() || t1.isAlive()) { } System.out.println("Counter is: " + BusyThread.counter); } }
Search within Codexpedia
Custom Search
Search the entire web
Custom Search
Related Posts