Click here to Skip to main content
15,667,014 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi i am newbie to multithread in java
i have to thread and i want to share two varibles(x,y) between two thread that one thread adds a number to variables and another thread prints variable value,how can i do it?
public class First{
int x,y;
publi First(){
public void doIt(){
Thread t1=new Thread(new Second());
System.out.println("x is:"+x,"y is:"+y);
class Second implements Runnable{

private void increment(int x,int y){
public void run(){
Updated 6-May-11 22:03pm

1 solution

Technically speaking, all you need to work with class members shared by two or more thread is lock. Please see:[^].

This task is interesting by the reason not directly related to the techniques of thread synchronization, but due to its effect on semantic. This is classical example of race condition, see[^]. This is just a technical term. I used to lean about this phenomenal with the use of different, more definitive term "incorrect dependency of the order of execution". This is exactly what it is.

In this example, the output of the code in unpredictable, despite of correct thread synchronization: sometimes main thread may print incremented, sometimes non-incremented values, because nothing guarantees any certain order of the operation on the shared memory: sometimes can print and later increment, sometime it can increment and then print. (However, these variants could come with very different probabilities; this is a danger of race conditions: a program may work millions of time in expected order but eventually change the order the way it defeats its purpose.)

I hope the sole purpose of this code would be exactly this: to demonstrate race condition. This is no any practical sense in using threads for such tasks.

Share this answer

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900