标签:style class blog code java tar
public class AnimatedCharacterDisplayCanvas extends CharacterDisplayCanvas implements CharacterListener, Runnable { private boolean done = true; private int curX = 0; private Thread timer = null; public AnimatedCharacterDisplayCanvas() { } public AnimatedCharacterDisplayCanvas(CharacterSource cs) { super(cs); } public synchronized void newCharacter(CharacterEvent ce) { curX = 0; tmpChar[0] = (char) ce.character; repaint(); } protected synchronized void paintComponent(Graphics gc) { Dimension d = getSize(); gc.clearRect(0, 0, d.width, d.height); if (tmpChar[0] == 0) return; int charWidth = fm.charWidth(tmpChar[0]); gc.drawChars(tmpChar, 0, 1, curX++, fontHeight); } public synchronized void run() { while (true) { try { if (done) { wait(); } else { repaint(); wait(100); } } catch (InterruptedException ie) { return; } } } public synchronized void setDone(boolean b) { done = b; if (timer == null) { timer = new Thread(this); timer.start(); } if (!done) notify(); } }
public class AnimatedCharacterDisplayCanvas extends CharacterDisplayCanvas implements CharacterListener, Runnable { private boolean done = true; private int curX = 0; private Thread timer = null; private Object doneLock = new Object(); public AnimatedCharacterDisplayCanvas() { } public AnimatedCharacterDisplayCanvas(CharacterSource cs) { super(cs); } public synchronized void newCharacter(CharacterEvent ce) { curX = 0; tmpChar[0] = (char) ce.character; repaint(); } protected synchronized void paintComponent(Graphics gc) { Dimension d = getSize(); gc.clearRect(0, 0, d.width, d.height); if (tmpChar[0] == 0) return; int charWidth = fm.charWidth(tmpChar[0]); gc.drawChars(tmpChar, 0, 1, curX++, fontHeight); } public void run() { synchronized(doneLock) { while (true) { try { if (done) { doneLock.wait(); } else { repaint(); doneLock.wait(100); } } catch (InterruptedException ie) { return; } } } } public void setDone(boolean b) { synchronized(doneLock) { done = b; if (timer == null) { timer = new Thread(this); timer.start(); } if (!done) doneLock.notify(); } } }
public class RandomCharacterGenerator extends Thread implements CharacterSource { private static char[] chars; private static String charArray = "abcdefghijklmnopqrstuvwxyz0123456789"; static { chars = charArray.toCharArray(); } private Random random; private CharacterEventHandler handler; private boolean done = true; private Lock lock = new ReentrantLock(); private Condition cv = lock.newCondition(); public RandomCharacterGenerator() { random = new Random(); handler = new CharacterEventHandler(); } public int getPauseTime() { return (int) (Math.max(1000, 5000 * random.nextDouble())); } public void addCharacterListener(CharacterListener cl) { handler.addCharacterListener(cl); } public void removeCharacterListener(CharacterListener cl) { handler.removeCharacterListener(cl); } public void nextCharacter() { handler.fireNewCharacter(this, (int) chars[random.nextInt(chars.length)]); } public void run() { try { lock.lock(); while (true) { try { if (done) { cv.await(); } else { nextCharacter(); cv.await(getPauseTime(), TimeUnit.MILLISECONDS); } } catch (InterruptedException ie) { return; } } } finally { lock.unlock(); } } public void setDone(boolean b) { try { lock.lock(); done = b; if (!done) cv.signal(); } finally { lock.unlock(); } } }
Java 线程第三版 第四章 Thread Notification 读书笔记,布布扣,bubuko.com
Java 线程第三版 第四章 Thread Notification 读书笔记
标签:style class blog code java tar
原文地址:http://blog.csdn.net/androiddevelop/article/details/30711257