您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Java >> 折磨了几天的多线程问题 求大神

折磨了几天的多线程问题 求大神

来源:网络整理     时间:2016/6/28 8:08:27     关键词:

关于网友提出的“ 折磨了几天的多线程问题 求大神”问题疑问,本网通过在网上对“ 折磨了几天的多线程问题 求大神”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 折磨了几天的多线程问题 求大神
描述:

本帖最后由 ml774032194 于 2013-01-07 11:15:35 编辑

多线程JAVA数据同步

多线程访问多个服务器并下载一个文件 并且跳转到一个页面显示下载结果 现在是在windows上程序是能正常运行的,但是我把项目部署到Linux服务器上时 出现了问题 下面是代码:

public class TestThread implements Runnable {
	public Serverproxy serverproxy;
/> private TestITDSDownload ts;
public TestThread(Serverproxy serverproxy,TestITDSDownload tsd) { this.serverproxy = serverproxy; this.ts=tsd; } public void run() { try {
int result=ts.getITDSStatus(serverproxy.getIp(),                                                                                                             
                                serrverproxy.getFileId());//下载的方法会返回一个int类型判断是否下载成功 if(result==1)
{serverproxy.setResult("下载成功");}
/> if(result==2)
{serverproxy.setResult("下载失败");} if(result==4)
{serverproxy.setResult("内部错误");}      System.out.println("serverproxyResult:"+serverproxy.getIp()+serverproxy.getResult()); System.out.println("size为:"+TestITDSDownload.getSize()); System.out.println("结果添加前的serverproxyCheckList的长度:"+ts.serverproxyCheckList.size());
ts.serverproxyCheckList.add(serverproxy); System.out.println("结果添加后的serverproxyCheckList的长度:"+ts.serverproxyCheckList.size()); System.out.println("现在的isSuccess为:"+ts.getSuccess()); if(ts.serverproxyCheckList.size()==TestITDSDownload.getSize()){ ts.setSuccess(true); System.out.println("相等,isSuccess为:"+ts.getSuccess()); } } } catch (Exception e) {<> // TODO Auto-generated catch block } } }

serverproxy:服务器对象 保存的是服务器的IP,端口和下载结果
线程里访问传进来的服务器,然后去下载内容 并将下载结果 添加到对应的serverproxy对象中

public  class TestITDSDownload  {
public  List serverproxyCheckList = new ArrayList();
	public  boolean isSuccess=false;
	public boolean getSuccess() {
		return isSuccess;
} public void setSuccess(boolean isSuccess) { this.isSuccess = isSuccess; } //..其他代码 //开启线程的方法<> public List check(List serverproxyList) throws Exception { TestITDSDownload.setSize(serverproxyList.size()); for (int i = 0; i < serverproxyList.size(); i++) { TestThread t = new TestThread(serverproxyList.get(i),this); Thread thread = new Thread(t); thread.start(); } while(true){
if(getSuccess()){ <> System.out.println("成功!当前isSuccess为:"+getSuccess()); break; } } return serverproxyCheckList; } }

/> 我在Action里调用这个方法 并且传一个服务器信息的集合进来 遍历集合然后多线程访问每个服务器  serverproxyCheckList :存放下载完成的结果 我在线程里执行完下载后 把结果存入到serverproxyCheckList 
然后有一个判断 当结果集合的长度和我传进来的 服务器的集合长度相等时 说明所有服务器的结果都返回了 这里这样做是因为 在下载的方法里有一个限制 当我下载失败时 会等待30~40秒的时间才会返回下载结果 所以我在check()方法里加了个永真循环来等我的isSuccess的值发生改变 我在windows下程序是正常的
但是在Linux下时 isSuccess在线程里改变后 循环里的还是没变<> windows运行结果: serverproxyResult:10.192.27.54:8080下载成功  size为:1 结果添加前的serverproxyCheckList的长度:0
结果添加后的serverproxyCheckList的长度:1<> 现在的isSuccess为:false 相等,isSuccess为:true
/> 成功!当前isSuccess为:true
---------------------------------------
/> Linux运行结果: serverproxyResult:10.196.27.19:8080下载成功  size为:1 结果添加前的serverproxyCheckList的长度:0 结果添加后的serverproxyCheckList的长度:1 现在的isSuccess为:false 相等,isSuccess为:true -----------------------------------
这里可以看出 线程里 isSuccess已经变成了true 但是 while循环里的判断没有被触发 这个问题纠结几天了 判断的方法已经改了几次了 头发都想白了 求大神指教 折磨了几天的多线程问题 求大神
解决方案1:

不可能不一样吧。 一般只有路径才会出现系统不兼容的情况

解决方案2:

我也想学java

解决方案3:

serverproxyResult:10.196.27.19:8080下载成功   不是都提示下载成功了吗?是不是你linux上的没有加那句日志打印啊


以上介绍了“ 折磨了几天的多线程问题 求大神”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2124512.html

相关图片

相关文章