| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 990 人关注过本帖
标题:有关多线程
只看楼主 加入收藏
angelnana
Rank: 1
等 级:新手上路
帖 子:178
专家分:0
注 册:2007-8-13
收藏
 问题点数:0 回复次数:13 
有关多线程

题目:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
问题:我的程序出来的答案是错的,帮我修改一下,谢谢
代码:
package phrase3;
class tongbu{
private boolean available=false;
synchronized void plus(){
while(available==true)
try{
wait();
}catch(InterruptedException e){}
available=true;
notify();
}
synchronized void minus(){
while(available==false)
try{
wait();
}catch(InterruptedException e){}
available=false;
notify();
}
}

class Plus extends Thread{
private tongbu tb;
int num=0;
public Plus(tongbu thistb){
tb=thistb;
}
public void run(){
for(int i=0;i<100;i++){
num+=1;
System.out.println("the num plus:"+num);
tb.plus();
}
}
}
class Minus extends Thread{
private tongbu tb;
int num=0;
public Minus(tongbu thistb){
tb=thistb;
}
public void run(){
for(int i=0;i<100;i++){
num-=1;
System.out.println("the num minus:"+num);
tb.plus();
}
}
}

//class Minus implements Runnable{
// private tongbu tb;
// int num=0;
// public Minus(tongbu thistb){
// tb=thistb;
// }
// public void run() {
// for(int i=0;i<100;i++){
// num-=1;
// System.out.println("the num minus:"+num);
// tb.plus();
// }
// }
//
//}

public class MyThread {
public static void main(String args[]){
tongbu tb=new tongbu();
Plus p1=new Plus(tb);
Plus p2=new Plus(tb);
Minus m1=new Minus(tb);
Minus m2=new Minus(tb);
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
p1.start();
p2.start();
t1.start();
t2.start();
}
}

搜索更多相关主题的帖子: 线程 
2007-08-16 17:14
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
收藏
得分:0 

我觉得加减应该在tongbu类里实现,而线程类负责调用tongbu的加减两个方法
你再改一下试试

[此贴子已经被作者于2007-8-16 22:21:45编辑过]


win32汇编
病毒 加密
目前兴趣所在
2007-08-16 22:14
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
这个...我也不太明白...高手进来教一下吧...

I'm here, as always...
2007-08-20 09:56
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 

class tongbu{
static int num=0;
synchronized void plus(){
for(int i=0;i<100;i++){
num+=1;
System.out.println("the num plus:"+num);
}
}
synchronized void minus(){
for(int i=0;i<100;i++){
num-=1;
System.out.println("the num minus:"+num);
}
}
}

class Plus extends Thread{
private tongbu tb=new tongbu();
public void run(){
tb.plus();
}
}
class Minus extends Thread{
private tongbu tb=new tongbu();
public void run(){
tb.minus();
}
}

public class MyThread {
public static void main(String args[]){
Plus p1=new Plus();
Plus p2=new Plus();
Minus m1=new Minus();
Minus m2=new Minus();
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
p1.start();
p2.start();
t1.start();
t2.start();
}
}

2007-08-20 11:30
skylence
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-11-15
收藏
得分:0 
class tongbu{
private boolean available=false;
synchronized void plus(){
while(available==true)
try{
wait();
}catch(InterruptedException e){}
available=true;
notify();
}
synchronized void minus(){
while(available==false)
try{
wait();
}catch(InterruptedException e){}
available=false;
notify();
}
}
你这样写的话 这个根本就没什么用! 应该把i的相关放在里面

2007-08-20 12:19
angelnana
Rank: 1
等 级:新手上路
帖 子:178
专家分:0
注 册:2007-8-13
收藏
得分:0 
无理取闹说的正中要害,谢谢啦

2007-08-20 14:40
angelnana
Rank: 1
等 级:新手上路
帖 子:178
专家分:0
注 册:2007-8-13
收藏
得分:0 
回复:(huwangvs)class tongbu{ static int num=...
你的方法我明白了,但是有个问题,我想要得结果是在数0,1,2之间,也就是说必须做完两次加后做两次减,做完这两次减后再做两次加,可以做到吗?谢谢

2007-08-20 14:47
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 

我没法控制。。。。
p2.start();
t1.start();
t2.start();
启动之前,p1已经开始运行了n遍了。。。。

2007-08-20 18:06
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 

package src;

class tongbu{
int i;
boolean flag=false;
tongbu(int i){
this.i=i;
}
synchronized void plus(){
if(!flag){
try{
wait();
}catch(Exception e){
System.out.println(e);
}
}
flag=false;
notify();
System.out.println(i++);
}
synchronized void minus(){
if(flag){
try{
wait();
}catch(Exception e){
System.out.print(e);
}
}
flag=true;
notify();
System.out.println(-0);
}
}

class Plus extends Thread{
tongbu tb;
Plus(tongbu tb){
this.tb=tb;
start();
}
public void run(){
tb.plus();
}
}

class Minus extends Thread{
tongbu tb;
Minus(tongbu tb){
this.tb=tb;
start();
}
public void run(){
tb.minus();
}
}

public class MyThread {
public static void main(String args[]){
tongbu tb=new tongbu(0);
Plus p1=new Plus(tb);
Plus p2=new Plus(tb);
Minus m1=new Minus(tb);
Minus m2=new Minus(tb);
}
}
这个是我改的程序,有点问题,输出结果是0,0,1,0
我奇怪的是为什么在我写了p1,p2后,输出应该是0,1,为什么还是0,0?
难道p2的加1没有实现吗?为什么啊?


I'm here, as always...
2007-08-22 14:42
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
晕,上面的minus()里的System.out.println(-0)错了...改回来了,结果又变成0,-1,0,1了,更奇怪了...

I'm here, as always...
2007-08-22 14:44
快速回复:有关多线程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033817 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved