zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    中国剩余定理(SCAUOJ 1077)
    uva 11426 GCD
    LA 4119 Always an integer (数论+模拟)
    uva 12003 Array Transformer (线段树套平衡树)
    uva 10253 Series-Parallel Networks (整数划分+多重集)
    LA 4123 Glenbow Museum
    uva 11361 Investigating Div-Sum Property
    2013多校训练赛第二场 总结
    uva 11174 Stand in a Line (排列组合)
    canvas 画椭圆
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637249.html
Copyright © 2011-2022 走看看