sundianzhe 2017-06-20 06:24 采纳率: 100%
浏览 2899
已采纳

java 多线程中每个线程中new一个对象使用还是有问题,各位大神帮忙看看,什么原理

-//代码如下,启动多个线程,每个线程线程中 new Test1 使用,但是在Test1 的方法中打印大概率中存在重复的输入,请问这是为什么?
package com;

import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class Test2 {
public static void main(String[] args){
//System.out.println(System.getProperty("java.version"));
//System.out.println(Math.random());
final String xmlhead1="xmlhead1";
final String xmlbody1="xmlbody1";

 final String xmlhead2="xmlhead2";
 final String xmlbody2="xmlbody2";
ExecutorService exec = Executors.newCachedThreadPool(); 
final Semaphore semp = new Semaphore(5); 

for (int index = 0; index < 1000; index++) {
Runnable run = new Runnable() {
public void run() {
try {
// 获取许可
semp.acquire();
if(Math.random()>=(0.5)){
Test1 testone=new Test1();
//synchronized (testone){
testone.parseString(xmlhead1, xmlbody1);
//}
}
else{
Test1 testtwo=new Test1();
//synchronized (testtwo){
testtwo.parseString(xmlhead2, xmlbody2);
//}
}
semp.release();
}catch(Exception e){
e.printStackTrace();
}
}
};
exec.execute(run);
}
exec.shutdown();

}

}
class Test1 {
public String parseString(String head,String body){
System.out.println("parseString:"+this.toString());
return head+body;
}
}

  • 写回答

2条回答 默认 最新

  • 丵鹰 2017-06-20 07:02
    关注

    内存地址的分配与垃圾回收的,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Mac虚拟机安装Windows,Windows中用idea跑项目,报错process finished with exit code -1073741819(0xc0000005) 如何解决?
  • ¥15 关于python爬虫返回js数据结构的处理
  • ¥15 ubuntu所用stm32标准库开发烧录没反映
  • ¥15 运维工程师(在职人员回答)
  • ¥15 Kmeans的趋势分析有会的吗
  • ¥20 R语言单细胞测序 对seurat对象进行标准化时出现问题
  • ¥15 Anaconda navigator updateor一直更新
  • ¥15 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。
  • ¥15 求一个stm32串口控制程序