Topic: 一个线程的简单问题(对大虾来说的),

  Print this page

1.一个线程的简单问题(对大虾来说的), Copy to clipboard
Posted by: xiaoxiaoniaoge
Posted on: 2005-11-08 22:15

怎么写下面的代码

【代码2】 // 创建zhang,Bank对象为zhang的目标对象
【代码4】 // 创建keven,Bank对象为keven的目标对象

class Bank implements Runnable
{
int money=100; // 声明一个int型变量money,初值为100
Thread zhang,keven;
Bank()
{
【代码2】 // 创建zhang,Bank对象为zhang的目标对象
zhang.setName("会计"); // 设置zhang线程的名字为“会计”
【代码4】 // 创建keven,Bank对象为keven的目标对象
keven.setName("出纳"); // 设置keven线程的名字为“出纳”
}
public void run()
{
int i=0; // 声明一个int类型变量i,初值为0
while(true)
{
if (Thread.currentThread().getName().equals("会计"))
// 判断线程zhang是否正在占有CUP资源
{
i=i+1;
money=money+1;
System.out.printf("\n%s将money的值改为%d\t",zhang.getName(),money);
System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);
if(i>=6)
{
System.out.printf("%s线程进入死亡状态\n",zhang.getName());
break; // 使得线程zhang进入死亡状态
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
}
}
else if(Thread.currentThread().getName().equals("出纳")) // 判断线程keven是否正在占有CUP资源
{
i=i-1;
money=money-1;
System.out.printf("\n%s将money的值改为%d\t",keven.getName(),money);
System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);
if(i<=-6)
{
System.out.printf("%s线程进入死亡状态\n",keven.getName());
break; // 使得线程keven进入死亡状态
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
}
}
}
}
}
class BankExample
{
public static void main(String args[ ])
{
Bank bank=new Bank();
bank.zhang.start();
bank.keven.start();
}
}

2.Re:一个线程的简单问题(对大虾来说的), [Re: xiaoxiaoniaoge] Copy to clipboard
Posted by: wallacer
Posted on: 2005-11-09 10:30

class Bank implements Runnable {
  int money=100; // 声明一个int型变量money,初值为100
  Thread sefThread;
  public Bank(String kind) {
    sefThread = new Thread(this);
    sefThread.setName(kind);
  }
  
  public void start() {
    sefThread.start();
  }
  public void run() {
    int i=0;// 声明一个int类型变量i,初值为0
    while(true) {
      if (Thread.currentThread().getName().equals("会计")) {
      // 判断线程zhang是否正在占有CUP资源
        i=i+1;
        money=money+1;
        System.out.printf("\n%s将money的值改为%d\t",
          sefThread.getName(),money);
        System.out.printf("%s的局部变量i=%d\n",sefThread.getName(),i);
        if(i>=6) {
          System.out.printf("%s线程进入死亡状态\n",sefThread.getName());
          break; // 使得线程zhang进入死亡状态
        }
        try {
          Thread.sleep(1000);
        }
        catch(InterruptedException e) {
        }
      }
       // 判断线程keven是否正在占有CUP资源
      else if(Thread.currentThread().getName().equals("出纳")) {
        i=i-1;
        money=money-1;
        System.out.printf("\n%s将money的值改为%d\t",
          sefThread.getName(),money);
        System.out.printf("%s的局部变量i=%d\n",sefThread.getName(),i);
        if(i<=-6) {
          System.out.printf("%s线程进入死亡状态\n",sefThread.getName());
          break; // 使得线程keven进入死亡状态
        }
        try {
          Thread.sleep(1000);
        }
        catch(InterruptedException e) {
        }
      }
    }
  }
}

public class BankExample {
  public static void main(String args[]) {
    Bank zhang = new Bank("会计");
    Bank keven = new Bank("出纳");
    zhang.start();
    keven.start();
  }
}

在实现Runnable接口的时候,要注意的一个问题就是实现Runnable借口的类本身不是一个Thread,我自己的经验就是在该类中保存一个selThread,另外家一个start()方法,这样看起来比较像一个Thread,初始化后直接使用start()后就可以启动线程了!哈哈

3.Re:一个线程的简单问题(对大虾来说的), [Re: xiaoxiaoniaoge] Copy to clipboard
Posted by: wallacer
Posted on: 2005-11-09 10:34

You can read this book "Java Threads Third Edition"!

4.Re:一个线程的简单问题(对大虾来说的), [Re: xiaoxiaoniaoge] Copy to clipboard
Posted by: xiaoxiaoniaoge
Posted on: 2005-11-09 20:25

wallacer:感谢哈,我从你的答案中得到了我的答案。。。

keven=new Thread(this);    
zhang=new Thread(this);
就可以运行了

5.Re:一个线程的简单问题(对大虾来说的), [Re: xiaoxiaoniaoge] Copy to clipboard
Posted by: guo849
Posted on: 2005-11-21 21:39

class Bank implements Runnable
{
  int money=100;
  Thread zhang,keven;
  Bank()
  {
    zhang=new Thread(this);
    zhang.setName("会计");
    keven=new Thread(this);
    keven.setName("出纳");    
  }
  public void run()
  {
    int i=0;
    while(true)
    {
      if(Thread.currentThread()==zhang)
      {
        i=i+1;
        money=money+1;
        System.out.print(zhang.getName()+"将money的值改为"+money+" ");
        System.out.println(zhang.getName()+"的局部变量i="+i);
        if(i>=6)
        {
          System.out.println(zhang.getName()+"线程进入死亡状态");
          return;
        }
        try{
Thread.sleep(4000);           
         }
        catch(InterruptedException e)
         {
         }        
      }
      else if(Thread.currentThread()==keven)
      {
        i=i-1;
        money=money-1;
        System.out.print(keven.getName()+"将money的值改为"+money+" ");
        System.out.println(keven.getName()+"的局部变量i="+i);
        if(i<=-6)
        {
          System.out.println(keven.getName()+"线程进入死亡状态");
          return;
        }
        try{
   Thread.sleep(4000);         
         }
        catch(InterruptedException e)
         {
         }
       }
     }
   }     
}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923