• Java多线程-一个简单的线程,实现挂起和恢复的功能


    public class MySprite implements Runnable {
    
        /*
         * 线程用变量
         */
        private boolean running = false;
        private boolean waiting = false;
        private Thread thread;
        
        /*
         * Business 变量
         */
        private String name;
        
        public MySprite(String name) {
            this.name = name;
            this.thread = new Thread(this);
        }
        
        /**
         * 启动线程
         */
        public void start() {
            running = true;
            thread.start();
        }
        
        /**
         * 挂起线程
         */
        public void suspend() {
            if (waiting) { // 是挂起状态则直接返回
                return;
            }
            synchronized (this) {
                this.waiting = true;
            }
        }
        
        /**
         * 恢复线程
         */
        public void resume() {
            if (!waiting) { // 没有挂起则直接返回
                return;
            }
            synchronized (this) {
                this.waiting = false;
                this.notifyAll();
            }
        }
        
        /**
         * 停止线程
         */
        public void stop() {
            if (!running) { // 没有运行则直接返回
                return;
            }
            synchronized (this) {
                running = false;
            }
        }
        
        public void run() {
            for(;;) {
                try {
                    // 线程挂起和退出处理
                    synchronized (this) {
                        if (!running) {
                            break;
                        }
                        if (waiting) {
                            this.wait();
                        }
                    }
    
                    // 应该做的事情
                    cry();
                    
                    // 进入等待状态
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        
        private void cry() {
            System.out.println(name + ":woo!");
        }
    }


    之前也是实现了Runnable接口,得到线程 Thread worker = new Thread(this);
    调用worker.wait();
    提示报错:java.lang.IllegalMonitorStateException
    产生错误原因可以查看:http://blog.csdn.net/intlgj/article/details/6245226
    代码转摘自:http://www.cnblogs.com/hcfalan/archive/2008/06/16/1222960.html


  • 相关阅读:
    Java_static
    Java_字符串操作
    Java_==
    Java_字符串
    Java_Random
    Java_Scanner
    杨辉三角
    颜色分类
    字符串倒序
    jQuery的基本事件
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637249.html
Copyright © 2020-2023  润新知