java 多线程成员变量问题?
这两段代码代码二是因为成员变量i同一个对象共享一份才执行50次可是代码一也是一个对象两条线程它也有一个成员变量privateExampleexample;为什么不是共享这...
这两段代码代码二是因为成员变量i 同一个对象共享一份才执行50次
可是代码一也是一个对象两条线程
它也有一个成员变量
private Example example;
为什么不是共享这一份
不执行50 次而执行了100次
代码一:
package com.t.thread;
public class ThreadTest4
{
public static void main(String[] args)
{
Example example = new Example();
Thread t1 = new TheThread(example);
Thread t2 = new TheThread(example);
t1.start();
t2.start();
}
}
class Example
{
public void execute()
{
for(int i = 0; i < 50; i++)
{
System.out.println("hello: " + i);
}
}
}
class TheThread extends Thread
{
private Example example;
public TheThread(Example example)
{
this.example = example;
}
@Override
public void run()
{
this.example.execute();
}
}
代码二:
package com.tt.thread;
public class ThreadTest3
{
public static void main(String[] args)
{
Runnable r = new HelloThread();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
class HelloThread implements Runnable
{
int i;
@Override
public void run()
{
while(true)
{
System.out.println("number: " + this.i++);
try
{
Thread.sleep((long)(Math.random() * 1000));
}
catch (InterruptedException e)
{
e.printStackTrace();
}
if(50 == this.i)
{
break;
}
}
}
} 展开
可是代码一也是一个对象两条线程
它也有一个成员变量
private Example example;
为什么不是共享这一份
不执行50 次而执行了100次
代码一:
package com.t.thread;
public class ThreadTest4
{
public static void main(String[] args)
{
Example example = new Example();
Thread t1 = new TheThread(example);
Thread t2 = new TheThread(example);
t1.start();
t2.start();
}
}
class Example
{
public void execute()
{
for(int i = 0; i < 50; i++)
{
System.out.println("hello: " + i);
}
}
}
class TheThread extends Thread
{
private Example example;
public TheThread(Example example)
{
this.example = example;
}
@Override
public void run()
{
this.example.execute();
}
}
代码二:
package com.tt.thread;
public class ThreadTest3
{
public static void main(String[] args)
{
Runnable r = new HelloThread();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
class HelloThread implements Runnable
{
int i;
@Override
public void run()
{
while(true)
{
System.out.println("number: " + this.i++);
try
{
Thread.sleep((long)(Math.random() * 1000));
}
catch (InterruptedException e)
{
e.printStackTrace();
}
if(50 == this.i)
{
break;
}
}
}
} 展开
展开全部
1,代码一的i是局部变量 代码2的i是全局变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Runnable跟Thread的区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还是把Java基础好好看看吧;变量的生存周期、内存管理这两部分的知识点把握的不够啊;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询