Re: thread pool
This is a multi-part message in MIME format.
----------------9810305661500614159
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Thanks for your answer. I have create a working (as I expected) example:
public class CMainLoop implements Runnable
{
private ExecutorService m_pool = Executors.newWorkStealingPool();
private Collection<Callable<Object>> m_tasks = new LinkedList();
private int m_simulationcount = 0;
@Override
public void run()
{
while ( !Thread.currentThread().isInterrupted() )
{
try
{
m_tasks.clear();
for ( ILayer l_layer :
CSimulation.getInstance().getWorld().values() )
m_tasks.add( l_layer );
m_pool.invokeAll( m_tasks );
m_tasks.clear();
for ( ILayer l_layer :
CSimulation.getInstance().getWorld().values() )
if ( l_layer instanceof IMultiLayer )
{
for ( Object l_object : ( (IMultiLayer) l_layer ) )
m_tasks.add( l_object );
m_pool.invokeAll( m_tasks );
}
m_simulationcount++;
Thread.sleep(
CConfiguration.getInstance().get().ThreadSleepTime );
}
catch ( InterruptedException e )
{
Thread.currentThread().interrupt();
return;
}
}
}
public void stop()
{
Thread.currentThread().interrupt();
}
This code runs very well, at the moment I need a resume / pause
function for the main loop. Can you send me any solution to optimize
my structure?
Thanks
Phil
On 2015-01-08 16:56:06 +0000, Stefan Ram said:
Philipp Kraus <philipp.kraus@flashpixx.de> writes:
I have got a Collection of Collections of Runnables, so the Collections
must be processed in a sequential order, but the Runnable objects can
be processed in parallel.
You used ??, so??, but I am not sure, whether there is an
implication here. Possibibly, /in your case/ this must be
so for additional reasons not given in the sentence above.
My question is, which thread structure can I used for this problem and
The new stream API supports MapReduce and parallel execution
of stream filters, and usually should be prefered to
applications of ??synchronized?? for better exploitation of
modern multi-core architectures and more safety, maybe
learning more about this API could be helpful for your?
I can't really tell how to map your specific problem to the
new API, though, but when writing parallel code in Java 8 it
should be the first attempt to try to use this API.
----------------9810305661500614159
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1265.21">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo}
p.p4 {margin: 0.0px 0.0px 0.0px 12.0px; line-height: 14.0px; font: 12.0px Helvetica; color: #011892}
p.p5 {margin: 0.0px 0.0px 0.0px 24.0px; font: 12.0px Helvetica; color: #008e00}
p.p6 {margin: 0.0px 0.0px 0.0px 12.0px; font: 12.0px Helvetica; color: #011892; min-height: 14.0px}
p.p7 {margin: 0.0px 0.0px 0.0px 12.0px; font: 12.0px Helvetica; color: #011892}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000; min-height: 14.0px}
span.s1 {color: #011993}
span.s2 {color: #955fa3}
span.s3 {color: #0433ff}
span.s4 {color: #929000}
</style>
</head>
<body>
<p class="p1">Thanks for your answer. I have create a working (as I expected) example:</p>
<p class="p2"><br></p>
<p class="p3"><span class="s1"><b>public class </b></span>CMainLoop <span class="s1"><b>implements </b></span>Runnable<br>
{<br>
<span class="Apple-converted-space">?? ?? </span><span class="s1"><b>private </b></span>ExecutorService <span class="s2"><b>m_pool </b></span>= Executors.<i>newWorkStealingPool</i>();<br>
<br>
<span class="Apple-converted-space">?? ?? </span><span class="s1"><b>private </b></span>Collection<Callable<Object>> <span class="s2"><b>m_tasks </b></span>= <span class="s1"><b>new </b></span>LinkedList();<br>
<br>
<span class="Apple-converted-space">?? ?? </span><span class="s1"><b>private int </b></span><span class="s2"><b>m_simulationcount </b></span>= <span class="s3">0</span>;<br>
<br>
<br>
<span class="Apple-converted-space">?? ?? </span><span class="s4">@Override<br>
<span class="Apple-converted-space">?? ?? </span></span><span class="s1"><b>public void </b></span>run()<br>
<span class="Apple-converted-space">?? ?? </span>{<br>
<span class="Apple-converted-space">?? ?? ?? ?? </span><span class="s1"><b>while </b></span>( !Thread.<i>currentThread</i>().isInterrupted() )<br>
<span class="Apple-converted-space">?? ?? ?? ?? </span>{<br>
<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? </span><span class="s1"><b>try<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? </span></b></span>{<br>
<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_tasks</b></span>.clear();<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s1"><b>for </b></span>( ILayer l_layer : CSimulation.<i>getInstance</i>().getWorld().values() )<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_tasks</b></span>.add( <i>l_layer</i> );<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_pool</b></span>.invokeAll( <span class="s2"><b>m_tasks </b></span>);<br>
<br>
<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_tasks</b></span>.clear();<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s1"><b>for </b></span>( ILayer l_layer : CSimulation.<i>getInstance</i>().getWorld().values() )<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s1"><b>if </b></span>( l_layer <span class="s1"><b>instanceof </b></span>IMultiLayer )<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span>{<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s1"><b>for </b></span>( Object l_object : ( (IMultiLayer) l_layer ) )<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_tasks</b></span>.add( l_object );<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_pool</b></span>.invokeAll( <span class="s2"><b>m_tasks </b></span>);<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? ?? ?? </span>}<br>
<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s2"><b>m_simulationcount</b></span>++;<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span>Thread.<i>sleep</i>( CConfiguration.<i>getInstance</i>().get().<span class="s2"><b>ThreadSleepTime </b></span>);<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? </span>}<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? </span><span class="s1"><b>catch </b></span>( InterruptedException e )<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? </span>{<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span>Thread.<i>currentThread</i>().interrupt();<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? ?? ?? </span><span class="s1"><b>return</b></span>;<br>
<span class="Apple-converted-space">?? ?? ?? ?? ?? ?? </span>}<br>
<span class="Apple-converted-space">?? ?? ?? ?? </span>}<br>
<span class="Apple-converted-space">?? ?? </span>}<br>
<br>
<br>
<span class="Apple-converted-space">?? ?? </span><span class="s1"><b>public void </b></span>stop()<br>
<span class="Apple-converted-space">?? ?? </span>{<br>
<span class="Apple-converted-space">?? ?? ?? ?? </span>Thread.<i>currentThread</i>().interrupt();<br>
<span class="Apple-converted-space">?? ?? </span>}<br>
</p>
<p class="p2"><br></p>
<p class="p1">This code runs very well, at the moment I need a resume / pause function for the main loop. Can you send me any solution to optimize</p>
<p class="p1">my structure?</p>
<p class="p2"><br></p>
<p class="p1">Thanks</p>
<p class="p2"><br></p>
<p class="p1">Phil</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p1">On 2015-01-08 16:56:06 +0000, Stefan Ram said:</p>
<p class="p2"><br></p>
<p class="p4">Philipp Kraus <philipp.kraus@flashpixx.de> writes:</p>
<p class="p5">I have got a Collection of Collections of Runnables, so the Collections<span class="Apple-converted-space">??</span></p>
<p class="p5">must be processed in a sequential order, but the Runnable objects can<span class="Apple-converted-space">??</span></p>
<p class="p5">be processed in parallel.</p>
<p class="p6"><br></p>
<p class="p7"><span class="Apple-converted-space">?? </span>You used ??, so??, but I am not sure, whether there is an</p>
<p class="p7"><span class="Apple-converted-space">?? </span>implication here. Possibibly, /in your case/ this must be</p>
<p class="p7"><span class="Apple-converted-space">?? </span>so for additional reasons not given in the sentence above.</p>
<p class="p6"><br></p>
<p class="p5">My question is, which thread structure can I used for this problem and<span class="Apple-converted-space">??</span></p>
<p class="p6"><br></p>
<p class="p7"><span class="Apple-converted-space">?? </span>The new stream API supports MapReduce and parallel execution</p>
<p class="p7"><span class="Apple-converted-space">?? </span>of stream filters, and usually should be prefered to</p>
<p class="p7"><span class="Apple-converted-space">?? </span>applications of ??synchronized?? for better exploitation of</p>
<p class="p7"><span class="Apple-converted-space">?? </span>modern multi-core architectures and more safety, maybe</p>
<p class="p7"><span class="Apple-converted-space">?? </span>learning more about this API could be helpful for your?</p>
<p class="p6"><br></p>
<p class="p7"><span class="Apple-converted-space">?? </span>I can't really tell how to map your specific problem to the</p>
<p class="p7"><span class="Apple-converted-space">?? </span>new API, though, but when writing parallel code in Java 8 it</p>
<p class="p7"><span class="Apple-converted-space">?? </span>should be the first attempt to try to use this API.</p>
<p class="p8"><br></p>
</body>
</html>
----------------9810305661500614159--