You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jakarta.apache.org by se...@apache.org on 2010/12/11 12:06:41 UTC
svn commit: r1044634 -
/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
Author: sebb
Date: Sat Dec 11 11:06:40 2010
New Revision: 1044634
URL: http://svn.apache.org/viewvc?rev=1044634&view=rev
Log:
ConcurrentHashMap does not need to be protected by synch.
Use for loops where possible to tidy code
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java?rev=1044634&r1=1044633&r2=1044634&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java Sat Dec 11 11:06:40 2010
@@ -30,6 +30,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
@@ -137,26 +138,20 @@ public class StandardJMeterEngine implem
if (engine == null) {
return false;// e.g. not yet started
}
- JMeterThread thrd=null;
- synchronized (engine.allThreads) { // Protect iterator
- Iterator<JMeterThread> iter = engine.allThreads.keySet().iterator();
- while(iter.hasNext()){
- thrd = iter.next();
- if (thrd.getThreadName().equals(threadName)){
- break; // Found matching thread
- }
- }
- }
- if (thrd != null) {
- thrd.stop();
- thrd.interrupt();
- if (now) {
- Thread t = engine.allThreads.get(thrd);
- if (t != null) {
- t.interrupt();
+ // ConcurrentHashMap does not need synch. here
+ for(Entry<JMeterThread, Thread> entry : engine.allThreads.entrySet()){
+ JMeterThread thrd = entry.getKey();
+ if (thrd.getThreadName().equals(threadName)){
+ thrd.stop();
+ thrd.interrupt();
+ if (now) {
+ Thread t = entry.getValue();
+ if (t != null) {
+ t.interrupt();
+ }
}
+ return true;
}
- return true;
}
return false;
}
@@ -255,7 +250,7 @@ public class StandardJMeterEngine implem
private void removeThreadGroups(List<?> elements) {
Iterator<?> iter = elements.iterator();
- while (iter.hasNext()) {
+ while (iter.hasNext()) { // Can't use for loop here because we remove elements
Object item = iter.next();
if (item instanceof AbstractThreadGroup) {
iter.remove();
@@ -267,9 +262,7 @@ public class StandardJMeterEngine implem
@SuppressWarnings("deprecation") // Deliberate use of deprecated method
private void notifyTestListenersOfStart(SearchByClass<TestListener> testListeners) {
- Iterator<TestListener> iter = testListeners.getSearchResults().iterator();
- while (iter.hasNext()) {
- TestListener tl = iter.next();
+ for (TestListener tl : testListeners.getSearchResults()) {
if (tl instanceof TestBean) {
TestBeanHelper.prepare((TestElement) tl);
}
@@ -283,9 +276,7 @@ public class StandardJMeterEngine implem
private void notifyTestListenersOfEnd(SearchByClass<TestListener> testListeners) {
log.info("Notifying test listeners of end of test");
- Iterator<TestListener> iter = testListeners.getSearchResults().iterator();
- while (iter.hasNext()) {
- TestListener tl = iter.next();
+ for (TestListener tl : testListeners.getSearchResults()) {
try {
if (host == null) {
tl.testEnded();
@@ -509,26 +500,18 @@ public class StandardJMeterEngine implem
private boolean verifyThreadsStopped() {
boolean stoppedAll = true;
- List<Thread> threadsToCheck = new ArrayList<Thread>(allThreads.size());
- synchronized (allThreads) { // Protect iterator
- Iterator<JMeterThread> iter = allThreads.keySet().iterator();
- while (iter.hasNext()) {
- Thread t = allThreads.get(iter.next());
- if (t != null) {
- threadsToCheck.add(t); // Do work later to reduce time in synch block.
- }
- }
- }
- for(int i=0; i < threadsToCheck.size(); i++) {
- Thread t = threadsToCheck.get(i);
- if (t.isAlive()) {
- try {
- t.join(WAIT_TO_DIE);
- } catch (InterruptedException e) {
- }
+ // ConcurrentHashMap does not need synch. here
+ for (Thread t : allThreads.values()) {
+ if (t != null) {
if (t.isAlive()) {
- stoppedAll = false;
- log.warn("Thread won't exit: " + t.getName());
+ try {
+ t.join(WAIT_TO_DIE);
+ } catch (InterruptedException e) {
+ }
+ if (t.isAlive()) {
+ stoppedAll = false;
+ log.warn("Thread won't exit: " + t.getName());
+ }
}
}
}
@@ -536,16 +519,14 @@ public class StandardJMeterEngine implem
}
private void tellThreadsToStop() {
- synchronized (allThreads) { // Protect iterator
- Iterator<JMeterThread> iter = new HashSet<JMeterThread>(allThreads.keySet()).iterator();
- while (iter.hasNext()) {
- JMeterThread item = iter.next();
- item.stop(); // set stop flag
- item.interrupt(); // interrupt sampler if possible
- Thread t = allThreads.get(item);
- if (t != null ) { // Bug 49734
- t.interrupt(); // also interrupt JVM thread
- }
+ // ConcurrentHashMap does not need protecting
+ for (Entry<JMeterThread, Thread> entry : allThreads.entrySet()) {
+ JMeterThread item = entry.getKey();
+ item.stop(); // set stop flag
+ item.interrupt(); // interrupt sampler if possible
+ Thread t = entry.getValue();
+ if (t != null ) { // Bug 49734
+ t.interrupt(); // also interrupt JVM thread
}
}
}
@@ -557,12 +538,9 @@ public class StandardJMeterEngine implem
}
private void stopAllThreads() {
- synchronized (allThreads) {// Protect iterator
- Iterator<JMeterThread> iter = new HashSet<JMeterThread>(allThreads.keySet()).iterator();
- while (iter.hasNext()) {
- JMeterThread item = iter.next();
- item.stop(); // This is quick
- }
+ // ConcurrentHashMap does not need synch. here
+ for (JMeterThread item : allThreads.keySet()) {
+ item.stop();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@jakarta.apache.org
For additional commands, e-mail: notifications-help@jakarta.apache.org