<html>
<head>
<meta name="viewport" content="width=device-width" />
<base href="http://wiki.javaforum.hu" />
<style type="text/css">
body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
small { font-size: 11px; }
body { width:100% !important; -webkit-font-smoothing: antialiased; }
body,
#email-wrapper { background-color: #f0f0f0; }
#email-wrapper-inner { padding: 20px; text-align: center; }
#email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
#email-footer { padding: 0 16px 32px 16px; margin: 0; }
.email-indent { margin: 8px 0 16px 0; }
.email-comment { margin: 0 0 0 56px; }
#email-title-avatar { text-align: left; vertical-align: top; width: 56px; }
#email-title-flavor { margin: 0; padding: 0 0 4px 0; }
#email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
#email-title .icon { border: 0; padding: 0 2px 0 0; text-align: left; }
#email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
#email-actions td { padding-top: 8px; }
#email-actions .left { max-width: 45%; text-align: left; }
#email-actions .right { text-align: right; }
.email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
.email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }
.email-metadata { color: #505050; }
a { color: #326ca6; text-decoration: none; }
a:hover { color: #336ca6; text-decoration: underline; }
a:active {color: #326ca6; }
a.email-footer-link { color: #505050; font-size: 11px; }
.email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
.email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
.email-list-divider { color: #505050; padding: 0 0.35em; }
.avatar { -ms-interpolation-mode: bicubic; }
.avatar-link { margin: 2px; }
.tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
.tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }
.aui-message { margin: 1em 0; padding: 8px; }
.aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
.aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
.aui-message.error,
.aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }
@media handheld, only screen and (max-device-width: 480px) {
div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
small, small a { -webkit-text-size-adjust: 90%; }
td[id=email-wrapper-inner] { padding: 2px !important; }
td[id=email-content-inner] { padding: 8px !important; }
td[id=email-footer] { padding: 8px 12px !important; }
div[class=email-indent] { margin: 8px 0px !important; }
div[class=email-comment] { margin: 0 !important; }
p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
p[id=email-permalink] { padding: 4px 0 0 0 !important; }
table[id=email-actions] td { padding-top: 0 !important; }
table[id=email-actions] td.right { text-align: right !important; }
table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
span[class=email-list-divider] { display: none; }
}
</style>
</head>
<body bgcolor="#f0f0f0" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
<table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
<tbody>
<tr valign="middle">
<td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
<table id="email-content" width="100%" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif">
<tbody>
<tr valign="top">
<td id="email-content-inner" width="100%" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
<table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
<tbody>
<tr>
<td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 56px"> <img class="avatar" src="cid:avatar_d7177d5506ab05ef431ea35647b597a3" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic" /> </td>
<td valign="top" style="font-size: 13px">
<div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
<a href="http://wiki.javaforum.hu/display/~auth.gabor" style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Auth Gábor</a> wrote a blog post:
</div> </td>
</tr>
<tr>
<td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="http://wiki.javaforum.hu/pages/viewpage.action?pageId=25034778" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:blogpost-icon" alt="" style="border: 0; padding: 0 2px 0 0; text-align: left" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">Java7 - Fork és Join</strong> </a> </h2> </td>
</tr>
</tbody>
</table>
<div class="email-indent" style="margin: 8px 0 16px 0">
<div class="email-page">
<p style="font-size: 13px">A Java 5 hozott néhány újdonságot a párhuzamos programozás terén, a Java 7 további könnyítéseket tartalmaz, amelyet <a href="http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">Fork/Join</a> néven találunk meg a dokumentációt böngészve, s három fontos osztály használatát kell csak megtanulnunk:</p>
<ul>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/RecursiveAction.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">RecursiveAction</a> – visszatérési érték nélküli feladat</li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/RecursiveTask.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">RecursiveTask</a> – visszatérési értéket adó feladat</li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ForkJoinPool.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">ForkJoinPool</a> – a szálakat kezelő osztály (thread pool)</li>
</ul>
<p style="font-size: 13px">Az elnevezésekből láthatjuk, hogy alapvetően hosszabb ideig tartó rekurzív feladatokra találták ki ezt a technológiát, mint a fájlrendszer felderítése vagy egy weboldal letöltése, de remekül használható matematikai és/vagy fizikai szimulációkhoz is. A <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/RecursiveTask.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">RecursiveTask</a> dokumentációs oldalán egy tipikus rekurzív feladat: a Fibonacci számsor kiszámolása a példa, nézzük meg közelebbről.</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeHeader panelHeader" style="border-bottom-width: 1px;">
<b>FibonacciTask.java</b>
</div>
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size: 13px">public class Fibonacci extends RecursiveTask<BigInteger>
{
final Integer number;
public Fibonacci(final Integer number)
{
this.number = number;
}
@Override
public BigInteger compute()
{
if (number <= 1)
{
return new BigInteger("" + number);
}
final Fibonacci f1 = new Fibonacci(number - 1);
f1.fork();
final Fibonacci f2 = new Fibonacci(number - 2);
f2.fork();
return f2.join().add(f1.join());
}
}</pre>
</div>
</div>
<p style="font-size: 13px">Két fontos dolgot kell észrevennünk:</p>
<ul>
<li style="font-size: 13px">Az osztály a <em>RecursiveTask</em> osztályból származik és implementálja a <em>compute</em> metódust az átadott <em>BigInteger</em> típus szerint (mivelhogy nagy számokkal dolgozunk).</li>
<li style="font-size: 13px">Létrehozunk két példányt, amelyeket a <em>fork</em> használatával elindításra jelölünk, majd a <em>join</em> hívással várjuk meg az eredményeket.</li>
</ul>
<p style="font-size: 13px">A használatához kell egy új osztály, amely létrehozza a ForkJoinPool példányt, majd elindítja a folyamatot, ezt alább látjuk:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeHeader panelHeader" style="border-bottom-width: 1px;">
<b>App.java</b>
</div>
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size: 13px">public class App
{
public BigInteger computeFibonacci(Integer number)
{
final Fibonacci fibonacci = new Fibonacci(number);
final ForkJoinPool fjPool = new ForkJoinPool(5);
return fjPool.invoke(fibonacci);
}
public static void main(String[] args)
{
final Integer number = Integer.parseInt(args[0]);
final App app = new App();
System.out.println(app.computeFibonacci(number));
}
}</pre>
</div>
</div>
<p style="font-size: 13px">Ez esetben a lényeg a <em>computeFibonacci</em> metódusban van, ahol létrehozunk egy új <em>Fibonacci</em> osztályt, egy új <em>ForkJoinPool</em> osztályt maximum öt szállal, majd egyszerűen az <em>invoke</em> használatával elindítjuk a többszálú folyamatot. A szálak számáról és a <em>ForkJoinPool</em> gondoskodik, a szálak indításáról és lezárásáról pedig a <em>RecursiveTask</em> ősosztályban megvalósított <em>fork</em> és <em>join</em> metódusok: a fejlesztőnek egyszerűen csak a feladatra kell koncentrálnia, minden mást megold a Java 7.</p>
<p style="font-size: 13px">Megfelelően nagy számmal indítva – az 40 már bőven sok – láthatjuk, hogy egy négymagos (nyolcutas) i7 processzort szépen kiterhel öt szálon az adott java processz:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size: 13px">PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7268 auth.gab 20 0 1191m 391m 7024 S 495 5.0 8:26.22 java</pre>
</div>
</div>
<p style="font-size: 13px">Ha megnöveljük a használt szálak számát, akkor egészen a processzor végső határig tudjuk növelni a párhuzamosságot:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size: 13px">PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7442 auth.gab 20 0 1192m 369m 7008 S 736 4.7 1:52.95 java</pre>
</div>
</div>
<p style="font-size: 13px">A kapott eredményt leellenőrizhetjük a <a href="http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">maths.surrey.ac.uk</a> adott oldalán; 40 esetén ez 102334155 kell legyen.</p>
<hr />
<p style="font-size: 13px">
<style type="text/css">
.rater {
color: #949494;
font-size: 11px;
margin: 4px 4px;
overflow: auto;
}
.rater td {
vertical-align: middle;
padding-top: 6px;
}
.rater .images {
padding-top: 3px;
}
.rater .links {
cursor: pointer;
}
.rater .disabled a {
cursor: default;
}
.rater img {
height: 18px;
width: 15px;
}
.rater .wait img {
height: 18px;
width: 20px;
background: transparent url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/loading_mini.gif) no-repeat scroll center left;
}
.rater a img {
border-style: none;
}
.results.caption {
padding-left: 8px;
}
.rater .right-space {
padding-right: 8px;
}
/* sprites */
.rater img { background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; }
.rater a.out img { background-position: 0 -275px; }
.rater a.over img, .rater img.over { background-position: 0 -226px; }
.rater a.off img, .rater img.off { background-position: 0 -128px; }
.rater a.on img, .rater img.on { background-position: 0 -177px; }
.rater img.half { background-position: 0 -79px; }
</style> <img width="0px" height="0px" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/loading_mini.gif" /> <img width="0px" height="0px" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif" /> </p>
<!-- only output the .vote td's if they CAN vote, but have NOT yet voted -->
<!-- obviously change the URL's on the a tags to reflect the various choices -->
<!-- only output the .wait td's if they CAN vote, but haven't already voted -->
<!-- always output .results td's - the classes (on, half and off) depict the current avg. rating -->
<!--td> <a id="activatePlusone-25034778" href="#"
                onClick="gapi.plusone.render('plusone-div-25034778');document.getElementById('activatePlusone-25034778').style.display='none';">Activate the +1 button</a>
                <div id="plusone-div-25034778"></div>
        </td-->
<table class="rater ceoId-25034778" style="color: #949494; font-size: 11px; margin: 4px 4px; overflow: auto">
<tbody>
<tr>
<!-- only output the .vote td's if they CAN vote, but have NOT yet voted -->
<td class="vote caption" style="font-size: 13px; vertical-align: middle; padding-top: 6px">Your Rating:</td>
<td class="vote thanks" style="display:none;; font-size: 13px; vertical-align: middle; padding-top: 6px">Thanks for voting!</td>
<!-- obviously change the URL's on the a tags to reflect the various choices -->
<td class="vote links images right-space" style="font-size: 13px; vertical-align: middle; padding-top: 6px; padding-top: 3px; cursor: pointer; padding-right: 8px"> <a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=25034778&rating=1&redirect=true" alt="Pathetic" title="Pathetic" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=25034778&rating=2&redirect=true" alt="Bad" title="Bad" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=25034778&rating=3&redirect=true" alt="OK" title="OK" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=25034778&rating=4&redirect=true" alt="Good" title="Good" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=25034778&rating=5&redirect=true" alt="Outstanding!" title="Outstanding!" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a> </td>
<!-- only output the .wait td's if they CAN vote, but haven't already voted -->
<td class="wait images" style="display:none;; font-size: 13px; vertical-align: middle; padding-top: 6px; padding-top: 3px"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Please Wait" title="Please Wait" style="height: 18px; width: 15px; height: 18px; width: 20px; background: transparent url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/loading_mini.gif) no-repeat scroll center left; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left" /></td>
<td class="wait text right-space" style="display:none;; font-size: 13px; vertical-align: middle; padding-top: 6px; padding-right: 8px">Please Wait</td>
<!-- always output .results td's - the classes (on, half and off) depict the current avg. rating -->
<td class="results caption border" style="font-size: 13px; vertical-align: middle; padding-top: 6px; padding-left: 8px">Results:</td>
<td class="results images" style="font-size: 13px; vertical-align: middle; padding-top: 6px; padding-top: 3px"> <img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Pathetic" title="Pathetic" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Bad" title="Bad" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="OK" title="OK" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Good" title="Good" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Outstanding!" title="Outstanding!" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /> </td>
<td class="results value" style="font-size: 13px; vertical-align: middle; padding-top: 6px">0</td>
<td class="results ratings" style="font-size: 13px; vertical-align: middle; padding-top: 6px">rates</td>
<!--td> <a id="activatePlusone-25034778" href="#"
                onClick="gapi.plusone.render('plusone-div-25034778');document.getElementById('activatePlusone-25034778').style.display='none';">Activate the +1 button</a>
                <div id="plusone-div-25034778"></div>
        </td-->
<td class="results" style="font-size: 13px; vertical-align: middle; padding-top: 6px"> </td>
<td style="font-size: 13px; vertical-align: middle; padding-top: 6px">
<g:plusone></g:plusone></td>
<td class="results" style="font-size: 13px; vertical-align: middle; padding-top: 6px"> </td>
<td style="font-size: 13px; vertical-align: middle; padding-top: 6px">
<div class="fb-like" data-send="true" data-layout="button_count" data-width="450" data-show-faces="true"></div></td>
</tr>
</tbody>
</table>
<p style="font-size: 13px"></p>
<p style="font-size: 13px"> </p>
<div class="bv_viewtracker">
<span class="bv_viewracker_span bv_viewtracker_closed"> Page viewed 1 times by 1 users since Jun 12, 2012 </span>
</div>
<div class="bv_viewtracker_visits" style="display:none;">
<table class="bv_viewtracker_table tableview attachments">
<tbody>
<tr class="bv_viewtracker_header">
<th class="bv_viewtracker_header_name" style="font-size: 13px; border-bottom: 1px solid #69c; font-weight: bold; text-align: left">Name</th>
<th class="bv_viewtracker_header_lastviewed" style="font-size: 13px; border-bottom: 1px solid #69c; font-weight: bold; text-align: left">Last viewed</th>
<th class="bv_viewtracker_header_timesviewed" style="font-size: 13px; border-bottom: 1px solid #69c; font-weight: bold; text-align: left">Times viewed</th>
</tr>
<tr class="bv_viewtracker_body">
<td class="bv_viewtracker_body_name" style="font-size: 13px; border-bottom: 1px solid #bbb; text-align: left; padding: 4px 16px 4px 0"> <a href="/display/~javalist" class="url fn confluence-userlink" data-username="javalist" style="color: #326ca6; text-decoration: none">Javaforum List</a><br /> </td>
<td class="bv_viewtracker_body_lastviewed" style="font-size: 13px; border-bottom: 1px solid #bbb; text-align: left; padding: 4px 16px 4px 0">Jun 12, 2012 22:06</td>
<td class="bv_viewtracker_body_timesviewed" style="font-size: 13px; border-bottom: 1px solid #bbb; text-align: left; padding: 4px 16px 4px 0">1</td>
</tr>
</tbody>
</table>
</div>
<p style="font-size: 13px"></p>
</div>
</div>
<table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
<tbody>
<tr>
<td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="http://wiki.javaforum.hu/pages/viewpage.action?pageId=25034778" style="color: #326ca6; text-decoration: none">View Online</a> </span> </td>
<td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="http://wiki.javaforum.hu/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="http://wiki.javaforum.hu/users/viewmyemailsettings.action" style="color: #326ca6; text-decoration: none">Unsubscribe from all blog posts</a> </span> </td>
</tr>
</tbody>
</table> </td>
</tr>
</tbody>
</table></td>
</tr>
<tr>
<td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 4.2, the <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/tour/enterprise-wiki.jsp">Enterprise Wiki</a> </small> </td>
</tr>
</tbody>
</table>
</body>
</html>