本帖最后由 337091921 于 2013-5-11 21:51 编辑
我要用序号代替<TransIDC>0000RINPRINP20090715120130004</TransIDC> 里面的内容,遇到了下面几个问题:
1, 我用replace方法contentString.replace("0000RINPRINP20090715120130004",String.valueOf(counter));
虽然在前面打印出counter的值是正确的,但是执行上面的方法后,<TransIDC>里面都是1,于是我改成了先截取<TransIDC>,然后再截取出</TransIDC>,最后拼接起来,结果绝大部分时候是正确的,但是偶尔有几个少了</TransIDC>中的<,成了类似 <TransIDC>101/TransIDC>,
2. 虚拟机能保证java的每个线程都能执行吗?因为看到在打出来的Log中,有的线程好像没有执行,会不会说起的线程太多了,某个线程一直得不到资源,就不能执行,一段时间以后就销毁了。
请大家帮忙看一下原因。
public class MyThread extends Thread {
static Logger logger = Logger.getLogger(MyThread.class);
int number;
long count = 1;
static String contentString = <TransIDC>0000RINPRINP20090715120130004</TransIDC> //FeeConfig.getConfigMap("./src/com/test/fee.config");
public MyThread(int num) {
number = num;
logger.debug("创建线程 " + number);
}
@Override
public void run() {
try {
while (true) { long startTime = System.currentTimeMillis();
startTime = System.currentTimeMillis();
long counter = Util.getCounter();
int index1 = contentString.indexOf("<TransIDC>");
int index2 = contentString.indexOf("</TransIDC>");
// logger.debug("index1:" + index1 + " index2:" + index2);
String tempString1 = contentString.substring(0, index1 + 10);
String tempString2 = contentString.substring(index2);
// contentString =
// contentString.replace("0000RINPRINP20090715120130004",
// String.valueOf(counter));
contentString = tempString1 + counter + tempString2;
logger.debug("counter:" + String.valueOf(counter));
String response = HttpPost.doHttpPost(contentString);
long endTime = System.currentTimeMillis();
if (response != null && response.length() > 0) {
// logger.debug(response);
logger.debug("线程 " + number + ":计数 " + String.valueOf(counter) + " get response:使用时间:" + String.valueOf(endTime - startTime));
}
if (++count == 21) {
return;
}
Thread.sleep(1000);
}
} catch (Exception e) {
logger.error(e);
e.printStackTrace();
}
}
public static void main(String args[]) { PropertyConfigurator.configure(MyThread.class.getResource("/log4j.properties"));
for (int i = 0; i < 20; i++) {
new MyThread(i + 1).start();
}
}
}
|