<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://mit.spbau.ru/sewiki/index.php?action=history&amp;feed=atom&amp;title=Java_Concurrent</id>
		<title>Java Concurrent - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://mit.spbau.ru/sewiki/index.php?action=history&amp;feed=atom&amp;title=Java_Concurrent"/>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=Java_Concurrent&amp;action=history"/>
		<updated>2026-04-21T11:46:52Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=Java_Concurrent&amp;diff=1277&amp;oldid=prev</id>
		<title>Antonk: Новая страница: «== 1. Executors ==  &lt;source lang=&quot;java&quot;&gt; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;  class Task imp…»</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=Java_Concurrent&amp;diff=1277&amp;oldid=prev"/>
				<updated>2012-04-11T07:58:23Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «== 1. Executors ==  &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;  class Task imp…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 1. Executors ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Random;&lt;br /&gt;
import java.util.concurrent.ExecutorService;&lt;br /&gt;
import java.util.concurrent.Executors;&lt;br /&gt;
&lt;br /&gt;
class Task implements Runnable {&lt;br /&gt;
	private int counter;&lt;br /&gt;
	public Task(int num) {&lt;br /&gt;
		this.counter = num;&lt;br /&gt;
	}&lt;br /&gt;
	public void run() {&lt;br /&gt;
		while (counter-- &amp;gt; 0) {&lt;br /&gt;
			System.out.println(Thread.currentThread() + &amp;quot;: &amp;quot; + counter);&lt;br /&gt;
			Thread.yield();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Random rand = new Random();&lt;br /&gt;
//		ExecutorService exec = Executors.newCachedThreadPool();&lt;br /&gt;
		ExecutorService exec = Executors.newFixedThreadPool(2);&lt;br /&gt;
		for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
			exec.execute(new Task(Math.abs(rand.nextInt())%10));&lt;br /&gt;
		}&lt;br /&gt;
		exec.shutdown();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Callable ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.concurrent.Callable;&lt;br /&gt;
import java.util.concurrent.ExecutionException;&lt;br /&gt;
import java.util.concurrent.ExecutorService;&lt;br /&gt;
import java.util.concurrent.Executors;&lt;br /&gt;
import java.util.concurrent.Future;&lt;br /&gt;
import java.util.concurrent.TimeUnit;&lt;br /&gt;
import java.util.concurrent.TimeoutException;&lt;br /&gt;
&lt;br /&gt;
class CallableTask implements Callable&amp;lt;Integer&amp;gt; {&lt;br /&gt;
	private int counter;&lt;br /&gt;
	private final int number;&lt;br /&gt;
	public CallableTask(int num) {&lt;br /&gt;
		this.counter = num;&lt;br /&gt;
		this.number = num;&lt;br /&gt;
	}&lt;br /&gt;
	public Integer call() {&lt;br /&gt;
		while (counter-- &amp;gt; 0) {&lt;br /&gt;
			System.out.println(Thread.currentThread() + &amp;quot;: &amp;quot; + counter);&lt;br /&gt;
			Thread.yield();&lt;br /&gt;
		}		&lt;br /&gt;
		return number;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class MainCallable {&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		ArrayList&amp;lt;Future&amp;lt;Integer&amp;gt;&amp;gt; results = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
		&lt;br /&gt;
		ExecutorService exec = Executors.newCachedThreadPool();&lt;br /&gt;
		for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
			results.add(exec.submit(new CallableTask(i)));&lt;br /&gt;
		}&lt;br /&gt;
		exec.shutdown();&lt;br /&gt;
		&lt;br /&gt;
		for (Future&amp;lt;Integer&amp;gt; fi : results) {&lt;br /&gt;
			try {&lt;br /&gt;
				System.out.println(fi.get());&lt;br /&gt;
			} catch (InterruptedException | ExecutionException e) {&lt;br /&gt;
				e.printStackTrace();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			try {&lt;br /&gt;
				System.out.println(fi.get(5, TimeUnit.SECONDS));&lt;br /&gt;
			} catch (InterruptedException | ExecutionException e) {&lt;br /&gt;
				e.printStackTrace();&lt;br /&gt;
			} catch (TimeoutException e) {&lt;br /&gt;
				e.printStackTrace();&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. ThreadFactory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.concurrent.ExecutionException;&lt;br /&gt;
import java.util.concurrent.ExecutorService;&lt;br /&gt;
import java.util.concurrent.Executors;&lt;br /&gt;
import java.util.concurrent.Future;&lt;br /&gt;
import java.util.concurrent.ThreadFactory;&lt;br /&gt;
&lt;br /&gt;
class DaemonThreadFactory implements ThreadFactory {&lt;br /&gt;
	public Thread newThread(Runnable r) {&lt;br /&gt;
		Thread t = new Thread(r);&lt;br /&gt;
		t.setDaemon(true);&lt;br /&gt;
		return t;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class MainThreadFactory {&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		ArrayList&amp;lt;Future&amp;lt;Integer&amp;gt;&amp;gt; results = new ArrayList&amp;lt;Future&amp;lt;Integer&amp;gt;&amp;gt;();&lt;br /&gt;
		&lt;br /&gt;
		ExecutorService exec = Executors.newCachedThreadPool(new DaemonThreadFactory());&lt;br /&gt;
		for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
			results.add(exec.submit(new CallableTask(i*100)));&lt;br /&gt;
		}&lt;br /&gt;
		exec.shutdown();&lt;br /&gt;
		&lt;br /&gt;
		for (Future&amp;lt;Integer&amp;gt; fi : results) {&lt;br /&gt;
			try {&lt;br /&gt;
				System.out.println(fi.get());&lt;br /&gt;
			} catch (InterruptedException | ExecutionException e) {&lt;br /&gt;
				e.printStackTrace();&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;
== 4. ThreadLocal ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.concurrent.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
 &lt;br /&gt;
class Accessor implements Runnable {&lt;br /&gt;
  private final int id;&lt;br /&gt;
  public Accessor(int idn) { id = idn; }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    while(!Thread.currentThread().isInterrupted()) {&lt;br /&gt;
      ThreadLocalVariableHolder.increment();&lt;br /&gt;
      System.out.println(this);&lt;br /&gt;
      Thread.yield();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;#&amp;quot; + id + &amp;quot;: &amp;quot; +&lt;br /&gt;
      ThreadLocalVariableHolder.get();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
class ThreadLocalVariableHolder {&lt;br /&gt;
	private static ThreadLocal&amp;lt;Integer&amp;gt; value = new ThreadLocal&amp;lt;Integer&amp;gt;()	{&lt;br /&gt;
		private Random rand = new Random(47);&lt;br /&gt;
		protected synchronized Integer initialValue() {&lt;br /&gt;
			return rand.nextInt(10000);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	public static void increment() {&lt;br /&gt;
		value.set(value.get() + 1);&lt;br /&gt;
	}&lt;br /&gt;
	public static int get() {&lt;br /&gt;
		return value.get();&lt;br /&gt;
	}	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class ThreadLocalTest {&lt;br /&gt;
&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    ExecutorService exec = Executors.newCachedThreadPool();&lt;br /&gt;
    for(int i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
      exec.execute(new Accessor(i));&lt;br /&gt;
    TimeUnit.SECONDS.sleep(3);   // Небольшая задержка&lt;br /&gt;
    exec.shutdownNow();          // Выход из всех объектов Accessor&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. CountDownLatch ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//: concurrency/CountDownLatchDemo.java&lt;br /&gt;
import java.util.concurrent.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
 &lt;br /&gt;
// Часть основной задачи.:&lt;br /&gt;
class TaskPortion implements Runnable {&lt;br /&gt;
  private static int counter = 0;&lt;br /&gt;
  private final int id = counter++;&lt;br /&gt;
  private static Random rand = new Random(47);&lt;br /&gt;
  private final CountDownLatch latch;&lt;br /&gt;
  TaskPortion(CountDownLatch latch) {&lt;br /&gt;
    this.latch = latch;&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      doWork();&lt;br /&gt;
      latch.countDown();&lt;br /&gt;
    } catch(InterruptedException ex) {&lt;br /&gt;
      // Приемлемый вариант выхода&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void doWork() throws InterruptedException {&lt;br /&gt;
    TimeUnit.MILLISECONDS.sleep(rand.nextInt(2000));&lt;br /&gt;
    System.out.println(this + &amp;quot;completed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return String.format(&amp;quot;%1$-3d &amp;quot;, id);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// Ожидание по объекту CountDownLatch:&lt;br /&gt;
class WaitingTask implements Runnable {&lt;br /&gt;
  private static int counter = 0;&lt;br /&gt;
  private final int id = counter++;&lt;br /&gt;
  private final CountDownLatch latch;&lt;br /&gt;
  WaitingTask(CountDownLatch latch) {&lt;br /&gt;
    this.latch = latch;&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      latch.await();&lt;br /&gt;
      System.out.println(&amp;quot;Latch barrier passed for &amp;quot; + this);&lt;br /&gt;
    } catch(InterruptedException ex) {&lt;br /&gt;
      System.out.println(this + &amp;quot; interrupted&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return String.format(&amp;quot;WaitingTask %1$-3d &amp;quot;, id);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
public class CountDownLatchDemo {&lt;br /&gt;
  static final int SIZE = 100;&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    ExecutorService exec = Executors.newCachedThreadPool();&lt;br /&gt;
    // Все подзадачи совместно используют один объект CountDownLatch:&lt;br /&gt;
    CountDownLatch latch = new CountDownLatch(SIZE);&lt;br /&gt;
    for(int i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
      exec.execute(new WaitingTask(latch));&lt;br /&gt;
    for(int i = 0; i &amp;lt; SIZE; i++)&lt;br /&gt;
      exec.execute(new TaskPortion(latch));&lt;br /&gt;
    System.out.println(&amp;quot;Launched all tasks&amp;quot;);&lt;br /&gt;
    exec.shutdown(); // Выход по завершению всех задач&lt;br /&gt;
  }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Cyclicbarrier ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//: concurrency/HorseRace.java&lt;br /&gt;
// Using CyclicBarriers.&lt;br /&gt;
import java.util.concurrent.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
 &lt;br /&gt;
class Horse implements Runnable {&lt;br /&gt;
  private static int counter = 0;&lt;br /&gt;
  private final int id = counter++;&lt;br /&gt;
  private int strides = 0;&lt;br /&gt;
  private static Random rand = new Random(47);&lt;br /&gt;
  private static CyclicBarrier barrier;&lt;br /&gt;
  public Horse(CyclicBarrier b) { barrier = b; }&lt;br /&gt;
  public synchronized int getStrides() { return strides; }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      while(!Thread.interrupted()) {&lt;br /&gt;
        synchronized(this) {&lt;br /&gt;
          strides += rand.nextInt(3); // Produces 0, 1 or 2&lt;br /&gt;
        }&lt;br /&gt;
        barrier.await();&lt;br /&gt;
      }&lt;br /&gt;
    } catch(InterruptedException e) {&lt;br /&gt;
      // Приемлемый вариант выхода&lt;br /&gt;
    } catch(BrokenBarrierException e) {&lt;br /&gt;
      // Исключение, которое нас интересует&lt;br /&gt;
      throw new RuntimeException(e);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() { return &amp;quot;Horse &amp;quot; + id + &amp;quot; &amp;quot;; }&lt;br /&gt;
  public String tracks() {&lt;br /&gt;
    StringBuilder s = new StringBuilder();&lt;br /&gt;
    for(int i = 0; i &amp;lt; getStrides(); i++)&lt;br /&gt;
      s.append(&amp;quot;*&amp;quot;);&lt;br /&gt;
    s.append(id);&lt;br /&gt;
    return s.toString();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
public class HorseRace {&lt;br /&gt;
  static final int FINISH_LINE = 25;&lt;br /&gt;
  private List&amp;lt;Horse&amp;gt; horses = new ArrayList&amp;lt;Horse&amp;gt;();&lt;br /&gt;
  private ExecutorService exec =&lt;br /&gt;
    Executors.newCachedThreadPool();&lt;br /&gt;
  private CyclicBarrier barrier;&lt;br /&gt;
  public HorseRace(int nHorses, final int pause) {&lt;br /&gt;
    barrier = new CyclicBarrier(nHorses, new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        StringBuilder s = new StringBuilder();&lt;br /&gt;
        for(int i = 0; i &amp;lt; FINISH_LINE; i++)&lt;br /&gt;
          s.append(&amp;quot;=&amp;quot;); // Забор на беговой дорожке&lt;br /&gt;
        System.out.println(s);&lt;br /&gt;
        for(Horse horse : horses)&lt;br /&gt;
        	System.out.println(horse.tracks());&lt;br /&gt;
        for(Horse horse : horses)&lt;br /&gt;
          if(horse.getStrides() &amp;gt;= FINISH_LINE) {&lt;br /&gt;
        	  System.out.println(horse + &amp;quot;won!&amp;quot;);&lt;br /&gt;
            exec.shutdownNow();&lt;br /&gt;
            return;&lt;br /&gt;
          }&lt;br /&gt;
        try {&lt;br /&gt;
          TimeUnit.MILLISECONDS.sleep(pause);&lt;br /&gt;
        } catch(InterruptedException e) {&lt;br /&gt;
        	System.out.println(&amp;quot;barrier-action sleep interrupted&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    for(int i = 0; i &amp;lt; nHorses; i++) {&lt;br /&gt;
      Horse horse = new Horse(barrier);&lt;br /&gt;
      horses.add(horse);&lt;br /&gt;
      exec.execute(horse);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    int nHorses = 7;&lt;br /&gt;
    int pause = 200;&lt;br /&gt;
    if(args.length &amp;gt; 0) { // Необязательный аргумент&lt;br /&gt;
      int n = new Integer(args[0]);&lt;br /&gt;
      nHorses = n &amp;gt; 0 ? n : nHorses;&lt;br /&gt;
    }&lt;br /&gt;
    if(args.length &amp;gt; 1) { // Необязательный аргумент&lt;br /&gt;
      int p = new Integer(args[1]);&lt;br /&gt;
      pause = p &amp;gt; -1 ? p : pause;&lt;br /&gt;
    }&lt;br /&gt;
    new HorseRace(nHorses, pause);&lt;br /&gt;
  }&lt;br /&gt;
} /* (Execute to see output) *///:~&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. Lock, Condotion ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.concurrent.locks.Condition;&lt;br /&gt;
import java.util.concurrent.locks.Lock;&lt;br /&gt;
import java.util.concurrent.locks.ReentrantLock;&lt;br /&gt;
&lt;br /&gt;
class BoundedBuffer {&lt;br /&gt;
   final Lock lock = new ReentrantLock();&lt;br /&gt;
   final Condition notFull  = lock.newCondition(); &lt;br /&gt;
   final Condition notEmpty = lock.newCondition(); &lt;br /&gt;
&lt;br /&gt;
   final Object[] items = new Object[100];&lt;br /&gt;
   int putptr, takeptr, count;&lt;br /&gt;
&lt;br /&gt;
   public void put(Object x) throws InterruptedException {&lt;br /&gt;
     lock.lock();&lt;br /&gt;
     try {&lt;br /&gt;
       while (count == items.length) &lt;br /&gt;
         notFull.await();&lt;br /&gt;
       items[putptr] = x; &lt;br /&gt;
       if (++putptr == items.length) putptr = 0;&lt;br /&gt;
       ++count;&lt;br /&gt;
       notEmpty.signal();&lt;br /&gt;
     } finally {&lt;br /&gt;
       lock.unlock();&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public Object take() throws InterruptedException {&lt;br /&gt;
     lock.lock();&lt;br /&gt;
     try {&lt;br /&gt;
       while (count == 0) &lt;br /&gt;
         notEmpty.await();&lt;br /&gt;
       Object x = items[takeptr]; &lt;br /&gt;
       if (++takeptr == items.length) takeptr = 0;&lt;br /&gt;
       --count;&lt;br /&gt;
       notFull.signal();&lt;br /&gt;
       return x;&lt;br /&gt;
     } finally {&lt;br /&gt;
       lock.unlock();&lt;br /&gt;
     }&lt;br /&gt;
   } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. Atomic &amp;amp; Speed Test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.concurrent.atomic.AtomicInteger;&lt;br /&gt;
import java.util.concurrent.locks.Lock;&lt;br /&gt;
import java.util.concurrent.locks.ReentrantLock;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class Speed {&lt;br /&gt;
	private static final int NUM = 100000000;&lt;br /&gt;
	Integer notAtomic = 0;&lt;br /&gt;
	int notAtomic2 = 0;&lt;br /&gt;
	AtomicInteger atomic = new AtomicInteger(0);&lt;br /&gt;
	Lock lock = new ReentrantLock();&lt;br /&gt;
	public synchronized Integer incrementNotAtomic() {&lt;br /&gt;
	    return notAtomic++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public Integer incrementNotAtomic2() {&lt;br /&gt;
		synchronized (notAtomic) {&lt;br /&gt;
			notAtomic++;&lt;br /&gt;
		}&lt;br /&gt;
		return notAtomic;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public Integer incrementNotAtomic2a() {&lt;br /&gt;
		synchronized (this) {&lt;br /&gt;
			notAtomic++;&lt;br /&gt;
		}&lt;br /&gt;
		return notAtomic;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public Integer incrementNotAtomic3() {&lt;br /&gt;
		lock.lock();&lt;br /&gt;
		try {&lt;br /&gt;
			notAtomic++;&lt;br /&gt;
		} finally {&lt;br /&gt;
			lock.unlock();&lt;br /&gt;
		}&lt;br /&gt;
		return notAtomic;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public synchronized Integer incrementNotAtomic4() {&lt;br /&gt;
	    return notAtomic2++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public Integer incrementNotAtomic5() {&lt;br /&gt;
		synchronized (this) {&lt;br /&gt;
			notAtomic2++;&lt;br /&gt;
		}&lt;br /&gt;
		return notAtomic2;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public Integer incrementNotAtomic6() {&lt;br /&gt;
		lock.lock();&lt;br /&gt;
		try {&lt;br /&gt;
			notAtomic2++;&lt;br /&gt;
		} finally {&lt;br /&gt;
			lock.unlock();&lt;br /&gt;
		}&lt;br /&gt;
		return notAtomic2;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Integer Synchronized method: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic2() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic2();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Integer Synchronized Integer: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic2a() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic2a();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Integer Synchronized This: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic3() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic3();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Integer Lock: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic4() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic4();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Int Synchronized method: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic5() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic5();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Int Synchronized This: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestNotAtomic6() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        incrementNotAtomic6();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Int Lock: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void performTestAtomic() {&lt;br /&gt;
	    final long start = System.currentTimeMillis();&lt;br /&gt;
	    for (int i = 0 ; i &amp;lt; NUM ; i++) {&lt;br /&gt;
	        atomic.getAndIncrement();&lt;br /&gt;
	    }&lt;br /&gt;
	    System.out.println(&amp;quot;Atomic: &amp;quot;+(System.currentTimeMillis() - start));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Speed s = new Speed();&lt;br /&gt;
		s.performTestAtomic();&lt;br /&gt;
		s.performTestNotAtomic();&lt;br /&gt;
		s.performTestNotAtomic2();&lt;br /&gt;
		s.performTestNotAtomic2a();&lt;br /&gt;
		s.performTestNotAtomic3();&lt;br /&gt;
		s.performTestNotAtomic4();&lt;br /&gt;
		s.performTestNotAtomic5();&lt;br /&gt;
		s.performTestNotAtomic6();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antonk</name></author>	</entry>

	</feed>