<?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%2FVolatile</id>
		<title>Java/Threads/Volatile - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FThreads%2FVolatile"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Volatile&amp;action=history"/>
		<updated>2026-04-24T02:55:09Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Threads/Volatile&amp;diff=8303&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Threads/Volatile&amp;diff=8303&amp;oldid=prev"/>
				<updated>2010-06-01T06:58:35Z</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/Volatile&amp;diff=8302&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/Volatile&amp;diff=8302&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;== Illustrate the volatile variables ==&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;
public class Volatile extends Object implements Runnable {&lt;br /&gt;
  // not marked as &amp;quot;volatile&amp;quot;, but it should be!&lt;br /&gt;
  private int value;&lt;br /&gt;
  private volatile boolean missedIt;&lt;br /&gt;
  // doesn&amp;quot;t need to be volatile-doesn&amp;quot;t change&lt;br /&gt;
  private long creationTime;&lt;br /&gt;
  public Volatile() {&lt;br /&gt;
    value = 10;&lt;br /&gt;
    missedIt = false;&lt;br /&gt;
    creationTime = System.currentTimeMillis();&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    print(&amp;quot;entering run()&amp;quot;);&lt;br /&gt;
    // each time, check to see if &amp;quot;value&amp;quot; is different&lt;br /&gt;
    while (value &amp;lt; 20) {&lt;br /&gt;
      // Used to break out of the loop if change to&lt;br /&gt;
      // value is missed.&lt;br /&gt;
      if (missedIt) {&lt;br /&gt;
        int currValue = value;&lt;br /&gt;
        // Simply execute a synchronized statement on an&lt;br /&gt;
        // arbitrary object to see the effect.&lt;br /&gt;
        Object lock = new Object();&lt;br /&gt;
        synchronized (lock) {&lt;br /&gt;
          // do nothing!&lt;br /&gt;
        }&lt;br /&gt;
        int valueAfterSync = value;&lt;br /&gt;
        print(&amp;quot;in run() - see value=&amp;quot; + currValue&lt;br /&gt;
            + &amp;quot;, but rumor has it that it changed!&amp;quot;);&lt;br /&gt;
        print(&amp;quot;in run() - valueAfterSync=&amp;quot; + valueAfterSync);&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    print(&amp;quot;leaving run()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void workMethod() throws InterruptedException {&lt;br /&gt;
    print(&amp;quot;entering workMethod()&amp;quot;);&lt;br /&gt;
    print(&amp;quot;about to sleep for 2 seconds&amp;quot;);&lt;br /&gt;
    Thread.sleep(2000);&lt;br /&gt;
    value = 50;&lt;br /&gt;
    print(&amp;quot;just set value=&amp;quot; + value);&lt;br /&gt;
    print(&amp;quot;about to sleep for 5 seconds&amp;quot;);&lt;br /&gt;
    Thread.sleep(5000);&lt;br /&gt;
    missedIt = true;&lt;br /&gt;
    print(&amp;quot;just set missedIt=&amp;quot; + missedIt);&lt;br /&gt;
    print(&amp;quot;about to sleep for 3 seconds&amp;quot;);&lt;br /&gt;
    Thread.sleep(3000);&lt;br /&gt;
    print(&amp;quot;leaving workMethod()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  private void print(String msg) {&lt;br /&gt;
    long interval = System.currentTimeMillis() - creationTime;&lt;br /&gt;
    String tmpStr = (interval / 1000.0) + &amp;quot;000&amp;quot;;&lt;br /&gt;
    int pos = tmpStr.indexOf(&amp;quot;.&amp;quot;);&lt;br /&gt;
    String secStr = tmpStr.substring(pos - 2, pos + 4);&lt;br /&gt;
    String nameStr = Thread.currentThread().getName();&lt;br /&gt;
    nameStr = nameStr.substring(nameStr.length() - 8, nameStr.length());&lt;br /&gt;
    System.out.println(secStr + &amp;quot; &amp;quot; + nameStr + &amp;quot;: &amp;quot; + msg);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    try {&lt;br /&gt;
      Volatile vol = new Volatile();&lt;br /&gt;
      // slight pause to let some time elapse&lt;br /&gt;
      Thread.sleep(100);&lt;br /&gt;
      Thread t = new Thread(vol);&lt;br /&gt;
      t.start();&lt;br /&gt;
      // slight pause to allow run() to go first&lt;br /&gt;
      Thread.sleep(100);&lt;br /&gt;
      vol.workMethod();&lt;br /&gt;
    } catch (InterruptedException x) {&lt;br /&gt;
      System.err.println(&amp;quot;one of the sleeps was interrupted&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;/div&gt;</summary>
			</entry>

	</feed>