public class Program
{
public static void main(String[] args)
{
int sum=0;
Customer cust1=new Customer();
Customer cust2=new Customer();
cust1.start();
cust2.start();
class Customer extends Thread
{
Customer() { }
public void run()
{
for (int i = 0; i < 2; i++)
{
Store(1000);
}
}
} public synchronized void Store(int number)
{
System.out.println(getName() + " 存款:" + number + "\n");
sum += number;
System.out.println("汇款总额是:" + sum + "\n");
}
}
}
public class Program { int sum=0; public static void main(String[] args) {
new Program().launch();
}
public void launch() { Customer cust1=new Customer();
Customer cust2=new Customer();
cust1.start();
cust2.start();
}
class Customer extends Thread {
public void run() { for (int i = 0; i < 2; i++) {
Store(1000);
}
}
} public synchronized void Store(int number){ System.out.println(" 存款:" + number + "\n");
sum += number;
System.out.println("汇款总额是:" + sum + "\n");
}
}这代码如有不懂的,可问我.
new Program().launch();
} public void launch() {
Customer cust1=new Customer();
Customer cust2=new Customer();
cust1.start();
cust2.start();
}
class Customer extends Thread {
public void run() { for (int i = 0; i < 2; i++) {
Store(1000);
}
}
} public synchronized void Store(int number){ System.out.println(" 存款:" + number + "\n");
sum += number;
System.out.println("汇款总额是:" + sum + "\n");
}
}
必须将int sum=0;改为volatile int sum=0;volatile修饰符可以保证任一线程在读取一个域时会看到最近刚
被写入的值。
也可以将sum += number;改为
synchronized(sum){
sum += number;
}
public class Bank
{
int sum=0;
public static void main(String[] args)
{
Bank bank1=new Bank();
Customer cust1=new Customer(bank1,"c1");
Customer cust2=new Customer(bank1,"c2");
cust1.start();
cust2.start();
}
public synchronized void Store(int number)
{
System.out.println( " 存款:" + number + "\n");
sum += number;
System.out.println("汇款总额是:" + sum + "\n");
}
}
/**
* 顾客类
* @author new
*
*/
class Customer extends Thread
{
Bank bank;
String customerName;
Customer(Bank bank,String customerName) {
this.bank=bank;
this.customerName=customerName;
}
public void run()
{
for (int i = 0; i < 2; i++)
{
bank.Store(1000);
}
}
public String getCustomerName(){
return customerName;
}}
public synchronized void Store(int number){//这个不是同步的关键字吗?sum就不会出现问题了 System.out.println(" 存款:" + number + "\n");
sum += number;
System.out.println("汇款总额是:" + sum + "\n");
}
System.out.println("顾客??"+" 存款:" + number + "\n");//这该怎么整啊??
System.out.println(Thread.currentThread());
System.out.println(" 存款:" + number + "\n");
这样好像 能区分,但还不完美……
System.out.println("线程名字:"+Thread.currentThread().getName()+" 存款:" + number + "\n");
public class Bank
{
int sum=0;
public static void main(String[] args)
{
Bank bank1=new Bank();
Customer cust1=new Customer(bank1,"c1","线程名字一");
Customer cust2=new Customer(bank1,"c2","线程名字二");
cust1.start();
cust2.start();
}
public synchronized void Store(int number)
{
System.out.println(Thread.currentThread().getName()+" 存款:" + number + "\n");
sum += number;
System.out.println("汇款总额是:" + sum + "\n");
}
}
/**
* 顾客类
* @author new
*
*/class Customer extends Thread
{
Bank bank;
String customerName;
Customer(Bank bank,String customerName,String threadName) {
super(threadName);//设置线程的名字
this.bank=bank;
this.customerName=customerName;
}
public void run()
{
for (int i = 0; i < 30; i++)
{
bank.Store(1000);
}
}
public String getCustomerName(){
return customerName;
}
}
Thread-1
存款:1000汇款总额是:1000Thread-2
存款:1000汇款总额是:2000Thread-1
存款:1000汇款总额是:3000Thread-2
存款:1000汇款总额是:4000
呵呵,谢谢了。虽然不是 线程名。但总可以区分两个线程了。。
感谢各位……