标题: 线程问题 [打印本页] 作者: MVP 时间: 2014-3-12 16:47 标题: 线程问题 *
需求:
有一个银行
银行有一个金库
有2个客户同时存钱 每次存100 存三次
*/
class Bank
{
private int sum;
public synchronized void add(int n)
{
sum = sum + n;
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread()+"sum:"+sum);
}
}
class Custorm implements Runnable
{
private Bank b = new Bank();
public void run()
{
for (int x = 0; x < 3; x++ )
{
b.add(100);
}
}
}
class BankDemo
{
public static void main(String[] args)
{
Custorm c = new Custorm();
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
这毕老师的线程视频章节的代码。我有个疑问,不是说Runnable 是共享同一个资源的,操作同一个run()方法吗,为什么运行后的代码会是存了6次,不应该只是存3次吗?我的理解是两个线程共同处理一个run()方法,所以只有3次,这样理解错误在哪?作者: 上官睿鹏 时间: 2014-3-12 17:01
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();
这里是创建了两个线程,启动一个线程调用一次run方法(而你的理解是两个线程共同处理一个run()方法),run方法执行一次for循环三次也就是往里面存了三次。那执行两次当然要存六次了~~~
不知道这样说能不能明白?作者: 菜小徐 时间: 2014-3-12 17:09
Runnable是共享同一个资源的,就好比有两辆车要过一条小路,但是小路只有一辆车的宽度,所以他们只能一个一个过,而不能同时通过。作者: 黄翔 时间: 2014-3-12 17:20
public interface Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。 也就是说想使用多线程的话就要实现这个接口。
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();创建了两个线程并将Custorm对象传入线程,然后两个线程分别被start启动,执行run方法。
结果是每个线程都执行了3次存钱。至于是两个线程谁先执行,又或者具体的细节,不用关心。