java的线程机制(一) 创建线程2013-12-07 cnblogs 文酱现在将1年前写的有关线程的文章再重新看了一遍,发现过去的自己还是照本宣科,毕竟是刚学java的人, 就想将java的精髓之一---线程进制掌握到手,还是有点难度。等到自己已经是编程一年级生了,还是无法将 线程这个高级的概念完全贯通,所以,现在趁着自己还在校,尽量的掌握多点有关线程机制的知识。我们以一个简单的例子开始下手:
public class SwingTypeTester extends JFrame implements CharacterSource{protected RandomCharacterGenerator producer;private CharacterDisplayCanvas displayCanvas;private CharacterDisplayCanvas feedbackCanvas;private JButton quitButton;private JButton startButton;private CharacterEventHandler handler;public SwingTypeTester() {initComponents();}private void initComponents() {handler = new CharacterEventHandler();displayCanvas = new CharacterDisplayCanvas();feedbackCanvas = new CharacterDisplayCanvas();quitButton = new JButton();startButton = new JButton();add(displayCanvas, BorderLayout.NORTH);add(feedbackCanvas, BorderLayout.CENTER);JPanel p = new JPanel();startButton.setLabel("Start");quitButton.setLabel("Quit");p.add(startButton);p.add(quitButton);add(p, BorderLayout.SOUTH);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent evt){quit();}});feedbackCanvas.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent ke){char c = ke.getKeyChar();if(c != KeyEvent.CHAR_UNDEFINED){newCharacter((int)c);}}});startButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) { producer = new RandomCharacterGenerator(); displayCanvas.setCharacterSource(producer); producer.start(); startButton.setEnabled(false); feedbackCanvas.setEnabled(true); feedbackCanvas.requestFocus();}});quitButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { quit();}});pack();}private void quit(){System.exit(0);}public void addCharacterListener(CharacterListener cl){handler.addCharacterListener(cl);}public void removeCharacterListener(CharacterListener cl){handler.removeCharacterListener(cl);}public void newCharacter(int c){handler.fireNewCharacter(this,c);}public void nextCharacter(){throw new IllegalStateException("We don"t produce on demand");}public static void main(String[] args){new SwingTypeTester().show();}}