Author: tv Date: Thu Feb 4 13:59:39 2016 New Revision: 1728482 URL: http://svn.apache.org/viewvc?rev=1728482&view=rev Log: Replace Thread.sleep with wait/notify and thread.join() respectively.
Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/LargeSelect.java Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/LargeSelect.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/LargeSelect.java?rev=1728482&r1=1728481&r2=1728482&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/LargeSelect.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/LargeSelect.java Thu Feb 4 13:59:39 2016 @@ -211,7 +211,7 @@ public class LargeSelect<T> implements R /** * The number of milliseconds to sleep before retrying to stop a query. */ - private static final int QUERY_STOP_SLEEP_TIME = 100; + private static final int QUERY_STOP_SLEEP_TIME = 1000; /** A place to store search parameters that relate to this query. */ private Map<String, String> params = null; @@ -438,7 +438,7 @@ public class LargeSelect<T> implements R { try { - Thread.sleep(QUERY_NOT_COMPLETED_SLEEP_TIME); + wait(QUERY_NOT_COMPLETED_SLEEP_TIME); } catch (InterruptedException e) { @@ -525,6 +525,7 @@ public class LargeSelect<T> implements R /** * A background thread that retrieves the rows. */ + @Override public void run() { /* The connection to the database. */ @@ -546,17 +547,14 @@ public class LargeSelect<T> implements R * no default peer class inside LargeSelect. This means that all * columns not fully qualified will not be modified. */ - String query; peer.correctBooleans( criteria); peer.setDbName(criteria); - query = SqlBuilder.buildQuery( - criteria) - .toString(); // Execute the query. if (log.isDebugEnabled()) { + String query = SqlBuilder.buildQuery(criteria).toString(); log.debug("run(): query = " + query); log.debug("run(): memoryLimit = " + memoryLimit); log.debug("run(): blockBegin = " + blockBegin); @@ -588,46 +586,51 @@ public class LargeSelect<T> implements R allRecordsRetrieved = true; } - synchronized (results) + synchronized (this) { - results.addAll(tempResults); - } + synchronized (results) + { + results.addAll(tempResults); + } - currentlyFilledTo += tempResults.size(); + currentlyFilledTo += tempResults.size(); - boolean perhapsLastPage = true; + boolean perhapsLastPage = true; - // If the extra record was indeed found then we know we are not - // on the last page but we must now get rid of it. - if (results.size() == memoryLimit + 1) - { - synchronized (results) + // If the extra record was indeed found then we know we are not + // on the last page but we must now get rid of it. + if (results.size() == memoryLimit + 1) { - results.remove(currentlyFilledTo--); + synchronized (results) + { + results.remove(currentlyFilledTo--); + } + perhapsLastPage = false; } - perhapsLastPage = false; - } - if (results.size() > 0 - && blockBegin + currentlyFilledTo >= totalRecords) - { - // Add 1 because index starts at 0 - totalRecords = blockBegin + currentlyFilledTo + 1; - } + if (results.size() > 0 + && blockBegin + currentlyFilledTo >= totalRecords) + { + // Add 1 because index starts at 0 + totalRecords = blockBegin + currentlyFilledTo + 1; + } - // if the db has limited the datasets, we must retrieve all - // datasets. - if (allRecordsRetrieved) - { - queryCompleted = true; - // The following ugly condition ensures that the totals are - // not finalized when a user does something like requesting - // a page greater than what exists in the database. - if (perhapsLastPage - && getCurrentPageNumber() <= getTotalPages()) + // if the db has limited the datasets, we must retrieve all + // datasets. + if (allRecordsRetrieved) { - totalsFinalized = true; + queryCompleted = true; + // The following ugly condition ensures that the totals are + // not finalized when a user does something like requesting + // a page greater than what exists in the database. + if (perhapsLastPage + && getCurrentPageNumber() <= getTotalPages()) + { + totalsFinalized = true; + } } + + notifyAll(); } } @@ -712,17 +715,16 @@ public class LargeSelect<T> implements R if (threadRunning) { killThread = true; - while (thread.isAlive()) + + try { - try - { - Thread.sleep(QUERY_STOP_SLEEP_TIME); - } - catch (InterruptedException e) - { - throw new TorqueException("Unexpected interruption", e); - } + thread.join(QUERY_STOP_SLEEP_TIME); } + catch (InterruptedException e) + { + throw new TorqueException("Unexpected interruption", e); + } + killThread = false; if (log.isDebugEnabled()) { --------------------------------------------------------------------- To unsubscribe, e-mail: torque-dev-unsubscr...@db.apache.org For additional commands, e-mail: torque-dev-h...@db.apache.org