2013年9月 ’ 的文章存档

一步一步掌握java的线程机制(一)-创建线程

现在将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() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                 producer = new RandomCharacterGenerator();
                 displayCanvas.setCharacterSource(producer);
                 producer.start();
                 startButton.setEnabled(false);
                 feedbackCanvas.setEnabled(true);
                 feedbackCanvas.requestFocus();
            }
        });

        quitButton.addActionListener(new ActionListener() {

            @Override
            public 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();
    }
}

这是一个java的Swing小例子,就是每隔一段时间就会显示一个随机的字母或者数字。具体的源码我会放在后面,现在只是对其中涉及到线程的部分进行重点讲解。 阅读全文

分布式系统编程,你到哪一级了?

介绍

当分布式系统编程成为你生活中的一部分时,你需要经历一段学习曲线。这篇文章描述了一下我当前在这个领域大致属于哪个层次,并希望能为你指出足够多 的错误,从别人的错误中学习,从而使你能以最优的路径通向成功。先声明一下,我在1995年时达到第1级,我现在处于第3级。你自己属于哪一级呢?
阅读全文

有关defunct进程(僵尸进程)的处理原则

僵尸进程:就是已经结束了的进程,但是没有从进程表中删除。太多了会导致进程表里面条目满了,进而导致系统崩溃,倒是不占用其他系统资源。

僵尸进程的查看:

ps -ef

出现:

root     13028 12956 0 10:51 pts/2    00:00:00 [ls] 

最后有defunct的标记,就表明是僵尸进程。 阅读全文

c reference manual读书笔记

第一部分

我读的是第五版的影印版,简单的做了一些笔记.下面是第二章的笔记.
阅读全文

JavaScript与有限状态机

有限状态机(Finite-state machine)是一个非常有用的模型,可以模拟世界上大部分事物。


阅读全文

如何利用bash/python计算IP子网容纳计算机数量

知道子网的IP和NETMASK,计算出这个子网可以包含多少台计算机?
阅读全文

一致性哈希算法应用与分析

一致性哈希算法主要使用在分布式数据存储系统中,按照一定的策略将数据尽可能均匀分布到所有的存储节点上去,使得系统具有良好的负载均衡性能和扩展性。感觉一致性哈希与数据结构中的“循环队列”还是有一点联系的。
阅读全文

理解本真的REST架构风格

本文将带您领略REST架构的起源、与Web的关系、REST架构的本质及特性,以及REST架构与其他架构风格之间的比较。
阅读全文

Java 实现 SSH 协议的客户端登录认证方式

简介: 本文首先对 SSH 协议的基础知识作以介绍,然后结合相关的 Java 代码逐步展开对登录认证方式的讨论。本文利于读者对 SSH 登录认证方式原理的理解,更有益于读者在实际项目中对 SSH 协议的应用。
背景

在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解。首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间能够进行正常的网络通信,不至于出现在一台机器上发出的指令到另一台机器上成了不可认的乱码,SSH 就是众多协议的其中之一。经典的七层 OSI 模型(Open System Interconnection Reference Model)出现后,大大地解决了网络互联的兼容性问题,它将网络划分成服务、接口和协议三个部分,而协议就是说明本层的服务是如何实现的。SSH、Telnet 协议则主要被使用在用户层中(如图 1 深色部分所示),即应用层、表现层和会话层。

阅读全文