标签:style class blog code java ext
public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; public ScoreLabel (CharacterSource generator, CharacterSource typist) { this.generator = generator; this.typist = typist; if (generator != null) generator.addCharacterListener(this); if (typist != null) typist.addCharacterListener(this); } public ScoreLabel () { this(null, null); } public synchronized void resetGenerator(CharacterSource newGenerator) { if (generator != null) generator.removeCharacterListener(this); generator = newGenerator; if (generator != null) generator.addCharacterListener(this); } public synchronized void resetTypist(CharacterSource newTypist) { if (typist != null) typist.removeCharacterListener(this); typist = newTypist; if (typist != null) typist.addCharacterListener(this); } public synchronized void resetScore() { score = 0; char2type = -1; setScore(); } private void setScore() { // This method will be explained later in chapter 7 SwingUtilities.invokeLater(new Runnable() { public void run() { setText(Integer.toString(score)); } }); } public synchronized void newCharacter(CharacterEvent ce) { // Previous character not typed correctly - 1 point penalty if (ce.source == generator) { if (char2type != -1) { score--; setScore(); } char2type = ce.character; } // If character is extraneous - 1 point penalty // If character does not match - 1 point penalty else { if (char2type != ce.character) { score--; } else { score++; char2type = -1; } setScore(); } } }
public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; private Lock scoreLock = new ReentrantLock(); public ScoreLabel (CharacterSource generator, CharacterSource typist) { this.generator = generator; this.typist = typist; if (generator != null) generator.addCharacterListener(this); if (typist != null) typist.addCharacterListener(this); } public ScoreLabel () { this(null, null); } public void resetGenerator(CharacterSource newGenerator) { try { scoreLock.lock(); if (generator != null) generator.removeCharacterListener(this); generator = newGenerator; if (generator != null) generator.addCharacterListener(this); } finally { scoreLock.unlock(); } } public void resetTypist(CharacterSource newTypist) { try { scoreLock.lock(); if (typist != null) typist.removeCharacterListener(this); typist = newTypist; if (typist != null) typist.addCharacterListener(this); } finally { scoreLock.unlock(); } } public void resetScore() { try { scoreLock.lock(); score = 0; char2type = -1; setScore(); } finally { scoreLock.unlock(); } } private void setScore() { // This method will be explained later in chapter 7 SwingUtilities.invokeLater(new Runnable() { public void run() { setText(Integer.toString(score)); } }); } public void newCharacter(CharacterEvent ce) { try { scoreLock.lock(); // Previous character not typed correctly - 1 point penalty if (ce.source == generator) { if (char2type != -1) { score--; setScore(); } char2type = ce.character; } // If character is extraneous - 1 point penalty // If character does not match - 1 point penalty else { if (char2type != ce.character) { score--; } else { score++; char2type = -1; } setScore(); } } finally { scoreLock.unlock(); } } }
public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; private Lock scoreLock = new ReentrantLock(); public ScoreLabel (CharacterSource generator, CharacterSource typist) { this.generator = generator; this.typist = typist; if (generator != null) generator.addCharacterListener(this); if (typist != null) typist.addCharacterListener(this); } public ScoreLabel () { this(null, null); } public void resetGenerator(CharacterSource newGenerator) { try { scoreLock.lock(); if (generator != null) generator.removeCharacterListener(this); generator = newGenerator; if (generator != null) generator.addCharacterListener(this); } finally { scoreLock.unlock(); } } public void resetTypist(CharacterSource newTypist) { try { scoreLock.lock(); if (typist != null) typist.removeCharacterListener(this); typist = newTypist; if (typist != null) typist.addCharacterListener(this); } finally { scoreLock.unlock(); } } public void resetScore() { try { scoreLock.lock(); score = 0; char2type = -1; setScore(); } finally { scoreLock.unlock(); } } private void setScore() { // This method will be explained later in chapter 7 SwingUtilities.invokeLater(new Runnable() { public void run() { setText(Integer.toString(score)); } }); } public void newCharacter(CharacterEvent ce) { if (ce.source == generator) { try { scoreLock.lock(); // Previous character not typed correctly - 1 point penalty if (char2type != -1) { score--; setScore(); } char2type = ce.character; } finally { scoreLock.unlock(); } } // If character is extraneous - 1 point penalty // If character does not match - 1 point penalty else { try { scoreLock.lock(); if (char2type != ce.character) { score--; } else { score++; char2type = -1; } setScore(); } finally { scoreLock.unlock(); } } } }
public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; public ScoreLabel (CharacterSource generator, CharacterSource typist) { this.generator = generator; this.typist = typist; if (generator != null) generator.addCharacterListener(this); if (typist != null) typist.addCharacterListener(this); } public ScoreLabel () { this(null, null); } public synchronized void resetGenerator(CharacterSource newGenerator) { if (generator != null) generator.removeCharacterListener(this); generator = newGenerator; if (generator != null) generator.addCharacterListener(this); } public synchronized void resetTypist(CharacterSource newTypist) { if (typist != null) typist.removeCharacterListener(this); typist = newTypist; if (typist != null) typist.addCharacterListener(this); } public synchronized void resetScore() { score = 0; char2type = -1; setScore(); } private void setScore() { // This method will be explained later in chapter 7 SwingUtilities.invokeLater(new Runnable() { public void run() { setText(Integer.toString(score)); } }); } public void newCharacter(CharacterEvent ce) { // Previous character not typed correctly - 1 point penalty if (ce.source == generator) { synchronized(this) { if (char2type != -1) { score--; setScore(); } char2type = ce.character; } } // If character is extraneous - 1 point penalty // If character does not match - 1 point penalty else { synchronized(this) { if (char2type != ce.character) { score--; } else { score++; char2type = -1; } setScore(); } } } }
public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; public ScoreLabel (CharacterSource generator, CharacterSource typist) { this.generator = generator; this.typist = typist; if (generator != null) generator.addCharacterListener(this); if (typist != null) typist.addCharacterListener(this); } public ScoreLabel () { this(null, null); } public synchronized void resetGenerator(CharacterSource newGenerator) { if (generator != null) generator.removeCharacterListener(this); generator = newGenerator; if (generator != null) generator.addCharacterListener(this); } public synchronized void resetTypist(CharacterSource newTypist) { if (typist != null) typist.removeCharacterListener(this); typist = newTypist; if (typist != null) typist.addCharacterListener(this); } public synchronized void resetScore() { score = 0; char2type = -1; setScore(); } private void setScore() { // This method will be explained later in chapter 7 SwingUtilities.invokeLater(new Runnable() { public void run() { setText(Integer.toString(score)); } }); } private synchronized void newGeneratorCharacter(int c) { if (char2type != -1) { score--; setScore(); } char2type = c; } private synchronized void newTypistCharacter(int c) { if (char2type != c) { score--; } else { score++; char2type = -1; } setScore(); } public synchronized void newCharacter(CharacterEvent ce) { // Previous character not typed correctly - 1 point penalty if (ce.source == generator) { newGeneratorCharacter(ce.character); } // If character is extraneous - 1 point penalty // If character does not match - 1 point penalty else { newTypistCharacter(ce.character); } } }
class X { ReentrantLock lock = new ReentrantLock(); // ... public void m() { assert lock.getHoldCount() == 0; lock.lock(); try { // ... method body } finally { lock.unlock(); } } }
Java 线程第三版 第三章数据同步 读书笔记,布布扣,bubuko.com
标签:style class blog code java ext
原文地址:http://blog.csdn.net/androiddevelop/article/details/30452799