java 两个线程共享变量,在两个线程之间共享变量

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?

thankspublic class First{

int x,y;

publi First(){

x=0;

y=0;

}

public void doIt(){

Thread t1=new Thread(new Second());

t1.start;

System.out.println("x is:"+x,"y is:"+y);

}

}

class Second implements Runnable{

private void increment(int x,int y){

x++;

y++;

}

public void run(){

increment(First.x,First.y);

}

}

解决方案

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

http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Lock.html[^].

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 http://en.wikipedia.org/wiki/Race_condition[^]. 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.

—SA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值