新手入门,被多线程虐的不行,完全不明觉厉。。求大神指导下。。。

Beginner_kk 2014-10-26 02:36:06
package sample;

class Sum implements Runnable{
/*String name;
Sum(String name){
this.name=name;
}*/
@SuppressWarnings("unused")
public void run(){
int sum=0;
for(int i=1;i<=20;i++){
sum+=i*(i+1);
}
}
}
class dq implements Runnable{

public void run(){
System.out.println();
}
}
public class Dxc {

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}


题目是一个线程运算,另外一个线程每隔一段时间读取前一个的运算结果。。。。。
第二个线程应该 怎么写。。。。。。
求大神指导下。。
...全文
147 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Beginner_kk 2014-10-26
  • 打赏
  • 举报
回复
引用 1 楼 addsspu 的回复:
仅供参考
package test003;
public class Dxc {
	public static void main(String[] args) {
		queuesum q=new queuesum();
		Sum ss=new Sum(q);
		dq dd=new dq(q);
		new Thread(ss).start();
		new Thread(dd).start();
	}
}

class Sum implements Runnable{
	queuesum q;
	public Sum(queuesum q){
		this.q=q;
	}
    public void run(){
    	while(true){
    		q.calsum();
    	}
    }
}
class dq implements Runnable{
	queuesum q;
	public dq(queuesum q){
		this.q=q;
	}
     
    public void run(){
    	while(true){
    		q.getsum();
    	}
    }
}

class queuesum{
	int sum;
	boolean flag=false;
	public synchronized void calsum(){
		if(!flag){
			sum=0;
			for(int i=1;i<=20;i++){
	            sum+=i*(i+1);
	            try {
					Thread.sleep(100);
				} catch (Exception ee) {
					ee.printStackTrace();
				}
	        }
			System.out.println("calsum OK!");
			flag=true;
			notify();
		}
		try
		{
			wait();
			
		}
		catch(Exception ee){
			ee.printStackTrace();
			
		}
	}
	
	public synchronized void getsum(){
		if(!flag){
			try
			{
				wait();
				
			}
			catch(Exception ee){
				ee.printStackTrace();
				
			}
		}
		flag=false;
		notify();
		System.out.println("sum="+sum);
	}
}
我已经解决了 还是谢谢你。。 不用那么麻烦加入wait()的
1239609798 2014-10-26
  • 打赏
  • 举报
回复
仅供参考
package test003;
public class Dxc {
	public static void main(String[] args) {
		queuesum q=new queuesum();
		Sum ss=new Sum(q);
		dq dd=new dq(q);
		new Thread(ss).start();
		new Thread(dd).start();
	}
}

class Sum implements Runnable{
	queuesum q;
	public Sum(queuesum q){
		this.q=q;
	}
    public void run(){
    	while(true){
    		q.calsum();
    	}
    }
}
class dq implements Runnable{
	queuesum q;
	public dq(queuesum q){
		this.q=q;
	}
     
    public void run(){
    	while(true){
    		q.getsum();
    	}
    }
}

class queuesum{
	int sum;
	boolean flag=false;
	public synchronized void calsum(){
		if(!flag){
			sum=0;
			for(int i=1;i<=20;i++){
	            sum+=i*(i+1);
	            try {
					Thread.sleep(100);
				} catch (Exception ee) {
					ee.printStackTrace();
				}
	        }
			System.out.println("calsum OK!");
			flag=true;
			notify();
		}
		try
		{
			wait();
			
		}
		catch(Exception ee){
			ee.printStackTrace();
			
		}
	}
	
	public synchronized void getsum(){
		if(!flag){
			try
			{
				wait();
				
			}
			catch(Exception ee){
				ee.printStackTrace();
				
			}
		}
		flag=false;
		notify();
		System.out.println("sum="+sum);
	}
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧