<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FThreads%2FThread_Attributes</id>
		<title>Java/Threads/Thread Attributes - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FThreads%2FThread_Attributes"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Thread_Attributes&amp;action=history"/>
		<updated>2026-04-23T08:48:39Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Threads/Thread_Attributes&amp;diff=8307&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Thread_Attributes&amp;diff=8307&amp;oldid=prev"/>
				<updated>2010-06-01T06:58:44Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:58, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Threads/Thread_Attributes&amp;diff=8306&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Thread_Attributes&amp;diff=8306&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Get Thread name ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class TwoThreadGetName extends Thread {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      printMsg();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void printMsg() {&lt;br /&gt;
    Thread t = Thread.currentThread();&lt;br /&gt;
    String name = t.getName();&lt;br /&gt;
    System.out.println(&amp;quot;name=&amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    TwoThreadGetName tt = new TwoThreadGetName();&lt;br /&gt;
    tt.start();&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      tt.printMsg();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set Thread Priority ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class SetPriority extends Object {&lt;br /&gt;
  private static Runnable makeRunnable() {&lt;br /&gt;
    Runnable r = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
          Thread t = Thread.currentThread();&lt;br /&gt;
          System.out.println(&amp;quot;in run() - priority=&amp;quot; + t.getPriority()&lt;br /&gt;
              + &amp;quot;, name=&amp;quot; + t.getName());&lt;br /&gt;
          try {&lt;br /&gt;
            Thread.sleep(2000);&lt;br /&gt;
          } catch (InterruptedException x) {&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    return r;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Thread threadA = new Thread(makeRunnable(), &amp;quot;threadA&amp;quot;);&lt;br /&gt;
    threadA.setPriority(8);&lt;br /&gt;
    threadA.start();&lt;br /&gt;
    Thread threadB = new Thread(makeRunnable(), &amp;quot;threadB&amp;quot;);&lt;br /&gt;
    threadB.setPriority(2);&lt;br /&gt;
    threadB.start();&lt;br /&gt;
    Runnable r = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        Thread threadC = new Thread(makeRunnable(), &amp;quot;threadC&amp;quot;);&lt;br /&gt;
        threadC.start();&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    Thread threadD = new Thread(r, &amp;quot;threadD&amp;quot;);&lt;br /&gt;
    threadD.setPriority(7);&lt;br /&gt;
    threadD.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(3000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    threadA.setPriority(3);&lt;br /&gt;
    System.out.println(&amp;quot;in main() - threadA.getPriority()=&amp;quot;&lt;br /&gt;
        + threadA.getPriority());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread general interrupt ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class GeneralInterrupt extends Object implements Runnable {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      System.out.println(&amp;quot;in run() - about to work2()&amp;quot;);&lt;br /&gt;
      work2();&lt;br /&gt;
      System.out.println(&amp;quot;in run() - back from  work2()&amp;quot;);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.out.println(&amp;quot;in run() - interrupted in work2()&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;in run() - doing stuff after nap&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;in run() - leaving normally&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void work2() throws InterruptedException {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      if (Thread.currentThread().isInterrupted()) {&lt;br /&gt;
        System.out.println(&amp;quot;C isInterrupted()=&amp;quot;&lt;br /&gt;
            + Thread.currentThread().isInterrupted());&lt;br /&gt;
        Thread.sleep(2000);&lt;br /&gt;
        System.out.println(&amp;quot;D isInterrupted()=&amp;quot;&lt;br /&gt;
            + Thread.currentThread().isInterrupted());&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void work() throws InterruptedException {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 100000; i++) {&lt;br /&gt;
        int j = i * 2;&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println(&amp;quot;A isInterrupted()=&amp;quot;&lt;br /&gt;
          + Thread.currentThread().isInterrupted());&lt;br /&gt;
      if (Thread.interrupted()) {&lt;br /&gt;
        System.out.println(&amp;quot;B isInterrupted()=&amp;quot;&lt;br /&gt;
            + Thread.currentThread().isInterrupted());&lt;br /&gt;
        throw new InterruptedException();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    GeneralInterrupt si = new GeneralInterrupt();&lt;br /&gt;
    Thread t = new Thread(si);&lt;br /&gt;
    t.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(2000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;in main() - interrupting other thread&amp;quot;);&lt;br /&gt;
    t.interrupt();&lt;br /&gt;
    System.out.println(&amp;quot;in main() - leaving&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ThreadGroup Enumerate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/* From http://java.sun.ru/docs/books/tutorial/index.html */&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
public class EnumerateMain {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new EnumerateTest().listCurrentThreads();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class EnumerateTest {&lt;br /&gt;
  public void listCurrentThreads() {&lt;br /&gt;
    ThreadGroup currentGroup = Thread.currentThread().getThreadGroup();&lt;br /&gt;
    int numThreads = currentGroup.activeCount();&lt;br /&gt;
    Thread[] listOfThreads = new Thread[numThreads];&lt;br /&gt;
    currentGroup.enumerate(listOfThreads);&lt;br /&gt;
    for (int i = 0; i &amp;lt; numThreads; i++)&lt;br /&gt;
      System.out.println(&amp;quot;Thread #&amp;quot; + i + &amp;quot; = &amp;quot;&lt;br /&gt;
          + listOfThreads[i].getName());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread ID ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class ThreadIDMain extends Object implements Runnable {&lt;br /&gt;
  private ThreadID var;&lt;br /&gt;
  public ThreadIDMain(ThreadID var) {&lt;br /&gt;
    this.var = var;&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      print(&amp;quot;var.getThreadID()=&amp;quot; + var.getThreadID());&lt;br /&gt;
      Thread.sleep(2000);&lt;br /&gt;
      print(&amp;quot;var.getThreadID()=&amp;quot; + var.getThreadID());&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static void print(String msg) {&lt;br /&gt;
    String name = Thread.currentThread().getName();&lt;br /&gt;
    System.out.println(name + &amp;quot;: &amp;quot; + msg);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ThreadID tid = new ThreadID();&lt;br /&gt;
    ThreadIDMain shared = new ThreadIDMain(tid);&lt;br /&gt;
    try {&lt;br /&gt;
      Thread threadA = new Thread(shared, &amp;quot;threadA&amp;quot;);&lt;br /&gt;
      threadA.start();&lt;br /&gt;
      Thread.sleep(500);&lt;br /&gt;
      Thread threadB = new Thread(shared, &amp;quot;threadB&amp;quot;);&lt;br /&gt;
      threadB.start();&lt;br /&gt;
      Thread.sleep(500);&lt;br /&gt;
      Thread threadC = new Thread(shared, &amp;quot;threadC&amp;quot;);&lt;br /&gt;
      threadC.start();&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ThreadID extends ThreadLocal {&lt;br /&gt;
  private int nextID;&lt;br /&gt;
  public ThreadID() {&lt;br /&gt;
    nextID = 10001;&lt;br /&gt;
  }&lt;br /&gt;
  private synchronized Integer getNewID() {&lt;br /&gt;
    Integer id = new Integer(nextID);&lt;br /&gt;
    nextID++;&lt;br /&gt;
    return id;&lt;br /&gt;
  }&lt;br /&gt;
  // override ThreadLocal&amp;quot;s version&lt;br /&gt;
  protected Object initialValue() {&lt;br /&gt;
    print(&amp;quot;in initialValue()&amp;quot;);&lt;br /&gt;
    return getNewID();&lt;br /&gt;
  }&lt;br /&gt;
  public int getThreadID() {&lt;br /&gt;
    Integer id = (Integer) get();&lt;br /&gt;
    return id.intValue();&lt;br /&gt;
  }&lt;br /&gt;
  private static void print(String msg) {&lt;br /&gt;
    String name = Thread.currentThread().getName();&lt;br /&gt;
    System.out.println(name + &amp;quot;: &amp;quot; + msg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread interrupt check ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class InterruptCheck extends Object {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Thread t = Thread.currentThread();&lt;br /&gt;
    System.out.println(&amp;quot;A: t.isInterrupted()=&amp;quot; + t.isInterrupted());&lt;br /&gt;
    t.interrupt();&lt;br /&gt;
    System.out.println(&amp;quot;B: t.isInterrupted()=&amp;quot; + t.isInterrupted());&lt;br /&gt;
    System.out.println(&amp;quot;C: t.isInterrupted()=&amp;quot; + t.isInterrupted());&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(2000);&lt;br /&gt;
      System.out.println(&amp;quot;NOT interrupted&amp;quot;);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.out.println(&amp;quot;Interrupted&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;D: t.isInterrupted()=&amp;quot; + t.isInterrupted());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread interrupt reset ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class InterruptReset extends Object {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println(&amp;quot;Thread.interrupted()=&amp;quot;&lt;br /&gt;
        + Thread.interrupted());&lt;br /&gt;
    Thread.currentThread().interrupt();&lt;br /&gt;
    System.out.println(&amp;quot;Thread.interrupted()=&amp;quot;&lt;br /&gt;
        + Thread.interrupted());&lt;br /&gt;
    System.out.println(&amp;quot;Thread.interrupted()=&amp;quot;&lt;br /&gt;
        + Thread.interrupted());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread Interrupt when calculating Pi ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class PiInterrupt extends Object implements Runnable {&lt;br /&gt;
  private double latestPiEstimate;&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      System.out.println(&amp;quot;for comparison, Math.PI=&amp;quot; + Math.PI);&lt;br /&gt;
      calcPi(0.000000001);&lt;br /&gt;
      System.out&lt;br /&gt;
          .println(&amp;quot;within accuracy, latest pi=&amp;quot; + latestPiEstimate);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.out.println(&amp;quot;INTERRUPTED!! latest pi=&amp;quot; + latestPiEstimate);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void calcPi(double accuracy) throws InterruptedException {&lt;br /&gt;
    latestPiEstimate = 0.0;&lt;br /&gt;
    long iteration = 0;&lt;br /&gt;
    int sign = -1;&lt;br /&gt;
    while (Math.abs(latestPiEstimate - Math.PI) &amp;gt; accuracy) {&lt;br /&gt;
      if (Thread.interrupted()) {&lt;br /&gt;
        throw new InterruptedException();&lt;br /&gt;
      }&lt;br /&gt;
      iteration++;&lt;br /&gt;
      sign = -sign;&lt;br /&gt;
      latestPiEstimate += sign * 4.0 / ((2 * iteration) - 1);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    PiInterrupt pi = new PiInterrupt();&lt;br /&gt;
    Thread t = new Thread(pi);&lt;br /&gt;
    t.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(10000);&lt;br /&gt;
      t.interrupt();&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread name ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class TwoThreadSetName extends Thread {&lt;br /&gt;
  public void run() {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
      printMsg();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void printMsg() {&lt;br /&gt;
    Thread t = Thread.currentThread();&lt;br /&gt;
    String name = t.getName();&lt;br /&gt;
    System.out.println(&amp;quot;name=&amp;quot; + name);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    TwoThreadSetName tt = new TwoThreadSetName();&lt;br /&gt;
    tt.setName(&amp;quot;thread&amp;quot;);&lt;br /&gt;
    tt.start();&lt;br /&gt;
    for ( int i = 0; i &amp;lt; 10; i++ ) {&lt;br /&gt;
      tt.printMsg();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread pending and interrupt ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class PendingInterrupt extends Object {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Thread.currentThread().interrupt();&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(2000);&lt;br /&gt;
      System.out.println(&amp;quot;NOT interrupted&amp;quot;);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.out.println(&amp;quot;Interrupted&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;elapsedTime=&amp;quot;&lt;br /&gt;
        + (System.currentTimeMillis() - startTime));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread Priority ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class PriorityCompete extends Object {&lt;br /&gt;
  private volatile int count;&lt;br /&gt;
  private boolean yield;&lt;br /&gt;
  private Thread internalThread;&lt;br /&gt;
  private volatile boolean noStopRequested;&lt;br /&gt;
  public PriorityCompete(String name, int priority, boolean yield) {&lt;br /&gt;
    count = 0;&lt;br /&gt;
    this.yield = yield;&lt;br /&gt;
    noStopRequested = true;&lt;br /&gt;
    Runnable r = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        try {&lt;br /&gt;
          runWork();&lt;br /&gt;
        } catch (Exception x) {&lt;br /&gt;
          x.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    internalThread = new Thread(r, name);&lt;br /&gt;
    internalThread.setPriority(priority);&lt;br /&gt;
  }&lt;br /&gt;
  private void runWork() {&lt;br /&gt;
    Thread.yield();&lt;br /&gt;
    while (noStopRequested) {&lt;br /&gt;
      if (yield) {&lt;br /&gt;
        Thread.yield();&lt;br /&gt;
      }&lt;br /&gt;
      count++;&lt;br /&gt;
      for (int i = 0; i &amp;lt; 1000; i++) {&lt;br /&gt;
        double x = i * Math.PI / Math.E;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void startRequest() {&lt;br /&gt;
    internalThread.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void stopRequest() {&lt;br /&gt;
    noStopRequested = false;&lt;br /&gt;
  }&lt;br /&gt;
  public int getCount() {&lt;br /&gt;
    return count;&lt;br /&gt;
  }&lt;br /&gt;
  public String getNameAndPriority() {&lt;br /&gt;
    return internalThread.getName() + &amp;quot;: priority=&amp;quot;&lt;br /&gt;
        + internalThread.getPriority();&lt;br /&gt;
  }&lt;br /&gt;
  private static void runSet(boolean yield) {&lt;br /&gt;
    PriorityCompete[] pc = new PriorityCompete[3];&lt;br /&gt;
    pc[0] = new PriorityCompete(&amp;quot;P0&amp;quot;, 3, yield);&lt;br /&gt;
    pc[1] = new PriorityCompete(&amp;quot;P1&amp;quot;, 6, yield);&lt;br /&gt;
    pc[2] = new PriorityCompete(&amp;quot;P2&amp;quot;, 6, yield);&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(1000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; pc.length; i++) {&lt;br /&gt;
      pc[i].startRequest();&lt;br /&gt;
    }&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(10000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; pc.length; i++) {&lt;br /&gt;
      pc[i].stopRequest();&lt;br /&gt;
    }&lt;br /&gt;
    long stopTime = System.currentTimeMillis();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(1000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    int totalCount = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; pc.length; i++) {&lt;br /&gt;
      totalCount += pc[i].getCount();&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;totalCount=&amp;quot; + totalCount + &amp;quot;, count/ms=&amp;quot;&lt;br /&gt;
        + roundTo(((double) totalCount) / (stopTime - startTime), 3));&lt;br /&gt;
    for (int i = 0; i &amp;lt; pc.length; i++) {&lt;br /&gt;
      double perc = roundTo(100.0 * pc[i].getCount() / totalCount, 2);&lt;br /&gt;
      System.out.println(pc[i].getNameAndPriority() + &amp;quot;, &amp;quot; + perc&lt;br /&gt;
          + &amp;quot;%, count=&amp;quot; + pc[i].getCount());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static double roundTo(double val, int places) {&lt;br /&gt;
    double factor = Math.pow(10, places);&lt;br /&gt;
    return ((int) ((val * factor) + 0.5)) / factor;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Runnable r = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        System.out.println(&amp;quot;Run without using yield()&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;=========================&amp;quot;);&lt;br /&gt;
        runSet(false);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;Run using yield()&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;=================&amp;quot;);&lt;br /&gt;
        runSet(true);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    Thread t = new Thread(r, &amp;quot;Priority&amp;quot;);&lt;br /&gt;
    t.setPriority(Thread.MAX_PRIORITY - 1);&lt;br /&gt;
    t.start();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Thread priority information ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
public class GetPriority extends Object {&lt;br /&gt;
  private static Runnable makeRunnable() {&lt;br /&gt;
    Runnable r = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
          Thread t = Thread.currentThread();&lt;br /&gt;
          System.out.println(&amp;quot;in run() - priority=&amp;quot; + t.getPriority()&lt;br /&gt;
              + &amp;quot;, name=&amp;quot; + t.getName());&lt;br /&gt;
          try {&lt;br /&gt;
            Thread.sleep(2000);&lt;br /&gt;
          } catch (InterruptedException x) {&lt;br /&gt;
            // ignore&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    return r;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println(&amp;quot;in main() - Thread.currentThread().getPriority()=&amp;quot;&lt;br /&gt;
        + Thread.currentThread().getPriority());&lt;br /&gt;
    System.out.println(&amp;quot;in main() - Thread.currentThread().getName()=&amp;quot;&lt;br /&gt;
        + Thread.currentThread().getName());&lt;br /&gt;
    Thread threadA = new Thread(makeRunnable(), &amp;quot;threadA&amp;quot;);&lt;br /&gt;
    threadA.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(3000);&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;in main() - threadA.getPriority()=&amp;quot;&lt;br /&gt;
        + threadA.getPriority());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilities to manage thread ids ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * JBoss, Home of Professional Open Source&lt;br /&gt;
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors &lt;br /&gt;
 * as indicated by the @author tags. &lt;br /&gt;
 * See the copyright.txt in the distribution for a&lt;br /&gt;
 * full listing of individual contributors. &lt;br /&gt;
 * This copyrighted material is made available to anyone wishing to use,&lt;br /&gt;
 * modify, copy, or redistribute it subject to the terms and conditions&lt;br /&gt;
 * of the GNU Lesser General Public License, v. 2.1.&lt;br /&gt;
 * This program is distributed in the hope that it will be useful, but WITHOUT A &lt;br /&gt;
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A &lt;br /&gt;
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License,&lt;br /&gt;
 * v.2.1 along with this distribution; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, &lt;br /&gt;
 * MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * (C) 2005-2006,&lt;br /&gt;
 * @author JBoss Inc.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * Provides utilities to manage thread ids.&lt;br /&gt;
 */&lt;br /&gt;
public class ThreadUtil {&lt;br /&gt;
  /**&lt;br /&gt;
   * The ID associated with the thread.&lt;br /&gt;
   */&lt;br /&gt;
  private static final ThreadLocal THREAD_ID = new ThreadLocal();&lt;br /&gt;
  /**&lt;br /&gt;
   * The thread id counter.&lt;br /&gt;
   */&lt;br /&gt;
  private static long id;&lt;br /&gt;
  /**&lt;br /&gt;
   * Get the string ID for the current thread.&lt;br /&gt;
   * &lt;br /&gt;
   * @return The thread id&lt;br /&gt;
   */&lt;br /&gt;
  public static String getThreadId() {&lt;br /&gt;
    return getThreadId(Thread.currentThread());&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Get the string ID for the specified thread.&lt;br /&gt;
   * &lt;br /&gt;
   * @param thread&lt;br /&gt;
   *          The thread.&lt;br /&gt;
   * @return The thread id&lt;br /&gt;
   */&lt;br /&gt;
  public static String getThreadId(final Thread thread) {&lt;br /&gt;
    final Object id = THREAD_ID.get();&lt;br /&gt;
    if (id != null) {&lt;br /&gt;
      return (String) id;&lt;br /&gt;
    }&lt;br /&gt;
    final String newId = getNextId();&lt;br /&gt;
    THREAD_ID.set(newId);&lt;br /&gt;
    return newId;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Get the next thread id to use.&lt;br /&gt;
   * &lt;br /&gt;
   * @return The next thread id.&lt;br /&gt;
   */&lt;br /&gt;
  private static synchronized String getNextId() {&lt;br /&gt;
    return &amp;quot;TSThread:&amp;quot; + Long.toHexString(++id);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>