黑马程序员技术交流社区
标题:
一个多线程小程序的改造问题
[打印本页]
作者:
左建飞
时间:
2012-8-2 12:59
标题:
一个多线程小程序的改造问题
本帖最后由 左建飞 于 2012-8-3 10:06 编辑
public class BankDemo {
/**
* 毕老师基础视频11天11.
*需求:银行有一个金库。
*有两个储户分别存300元,每次存100,存3次。
*/
public static void main(String[] args)
{
Cus c=new Cus();
Thread t1=new Thread(c);//两个储户同时向银行存储。
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
class Bank
{
private int sum;//此处的sum相当与银行的总存款。
Object obj=new Object();
public void add(int n)
{
synchronized(obj)
{
sum=sum+n;
try{Thread.sleep(10);}catch(InterruptedException e){}
System.out.println("sum="+sum);
}
}
}
class Cus implements Runnable//储户类?
{
Bank b=new Bank();
public void run()
{
for (int i = 0; i < 3; i++)
{
b.add(100);
}
}
}
复制代码
我想让程序的结果既显示银行的总存款,又显示每个储户的总存款。
应该怎么设计?加了线程后,这个问题把本菜鸟想的快崩溃了。求高手解答。
作者:
杜佳瑞
时间:
2012-8-2 18:09
标题:
RE: 一个多线程小程序的改造问题
public void add(int n)
{
String s=Thread.currentThread().getName();
synchronized(obj)
{
if (s.equals("Thread-0"))
{
sum1=sum1+n;
try{Thread.sleep(10);}catch(InterruptedException e){}
System.out.println("sum1="+sum1);
}
else
{
sum2=sum2+n;
try{Thread.sleep(10);}catch(InterruptedException e){}
System.out.println("sum2="+sum2);
}
}
}
感觉将两个线程分开来就好了,不知道这样写合不合适,另外算总的sum,在Bank类中在写个得到sum1和sum2和的方法就可以
作者:
郑正华
时间:
2012-8-2 18:57
package cn.itcast.demo;
import java.lang.Thread.State;
public class Test {
/**
*
* 毕老师基础视频11天11.
*
*需求:银行有一个金库。
*
*有两个储户分别存300元,每次存100,存3次。
*/
public static void main(String[] args) {
Cus c = new Cus();
Thread t1 = new Thread(c);// 两个储户同时向银行存储。
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
class Bank
{
private int sum;// 此处的sum相当与银行的总存款。
private int x,y;
Object obj = new Object();
public void add(int n) {
synchronized (obj)
{
sum = sum + n;
String str = Thread.currentThread().getName();
if(str.equals("Thread-0"))
{
try {
x = x + n;
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName()+"存款:"+x+";"+"银行总余额:" + sum);
}
else
{
if(str.equals("Thread-1"))
{
try {
y = y + n;
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName()+"存款:"+y+";"+"银行总余额:" + sum);
}
}
}
}
}
class Cus implements Runnable// 储户类?
{
Bank b = new Bank();
public void run()
{
for (int i = 0; i < 3; i++) {
b.add(100);
}
}
}
复制代码
QQ截图20120802185649.png
(10.94 KB, 下载次数: 60)
下载附件
2012-8-2 18:57 上传
作者:
左建飞
时间:
2012-8-6 11:49
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2