黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
Ricky_Nick
时间:
2014-4-25 10:42
标题:
多线程问题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。朋友说我我这个设计有安全问题,我觉得已经没什么问题了,谁帮忙看看…………
public class ThreadTest1{
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc();
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}
作者:
朱晓盼
时间:
2014-4-25 11:05
哥们,你把代码排版下吧,虽然你复制粘贴很省事,但是别人看你这样的代码很痛苦的:dizzy:
作者:
ilvsoft
时间:
2014-4-25 15:49
这书写台整齐了,整齐的都不想看啊,注意书写格式
作者:
你为谁归来
时间:
2014-4-25 16:22
public class ThreadTest1{
private int j;
public static void main(String args[])
{
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc();
Dec dec=tt.new Dec();
for(int i=0;i<2;i++)
{
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
private synchronized void inc()
{
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec()
{
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable
{
public void run(){
for(int i=0;i<100;i++)
{
inc();
}
}
}
class Dec implements Runnable
{
public void run()
{
for(int i=0;i<100;i++)
{
dec();
}
}
}
}
复制代码
我整理了一下,但从运行上面看是不存在安全问题的。虽然操作的是一个变量,但是由于你对这个变量没有要求也就没有什么相关的安全问题。但是要是应用在某些事情上就不行了。比如票,怎么会有负数呢。(当j--先执行的时候j就是负数)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2