`
kongweile
  • 浏览: 508322 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多

主程式代码:

public class MainApp {

    public static void main(String[] args) {
        
        try {
            MySprite dog = new MySprite("狗狗");
            MySprite cat = new MySprite("喵喵");
            MySprite pig = new MySprite("猪猪");
            
            System.out.println("--- start sprites");
            dog.start();
            cat.start();
            pig.start();
            Thread.sleep(500);
            System.out.println("--- suspend dog");
            dog.suspend();
            System.out.println("--- main thread do something");
            Thread.sleep(500);
            System.out.println("--- resume dog");
            dog.resume();
            Thread.sleep(500);
            System.out.println("--- end dog");
            dog.stop();
            System.out.println("--- main thread do something");
            Thread.sleep(500);
            System.out.println("--- end other sprites");
            cat.stop();
            pig.stop();
            Thread.sleep(100);
            System.out.println("--- exit programe.");
        }
 catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

}


线程实现

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!");
    }

}

可以结合UDP,TCP进行网络编程使用。在使用UDP时,由于DatagramSocket在接收数据的时候需要等待,程序不能进行停止的操作,所以要给datagramSocket加一个定时器,超时则进行下一次接收的过程。
分享到:
评论

相关推荐

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程实验

    java设计两个线程,一个线程充当电子表,每隔一秒在窗口上显示一下...另一个线程充当闹钟,每到整点就开始报时,即在窗口显示5次整点提示,同时将第一个线程挂起,报时完毕后再将第一个线程恢复。实验结果如图1-1所示:

    Java程序设计案例教程-第8章-多线程编程.pptx

    进程和线程的区别 进程和线程的区别可以总结为如下几点: 一个程序至少有一个进程,一个进程至少有一个线程,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。...

    java线程同步及通信

    1.线程同步 2.线程间通信 3.线程挂起、恢复和终止 demo演示

    java笔试题大集合及答案(另附各大公司笔试题)

    60、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    多线程,高并发.zip

    类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用 wait() 命其进入等待状态。若标志指出线程应当恢复,则用一个 notify() 重新启动线程。 2. sleep() 和 wait() 有什么区别?

    java课程设计报告-五子棋.doc

    、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...

    Java2实用教程.rar

    9 8挂起 恢复和终止线程 9 9计时器线程Timer 9 10线程联合 9 11守护线程 习题 第10章输入输出流 10 1File类 10 2FileInputStream类 10 3FileOutputStream类 10 4FileReader类和FileWriter类 10 5使用文件对话框打开...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    java课程设计报告-五子棋(1).doc

    、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...

    java课程设计报告-五子棋(2).doc

    、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程 、线程的定义 即同时执行多个程序段,每个程序段都是一个线程。 、线程的周期 线程的周期...

    java程序设计实验指导代码

    13.5 实验4 wait( )和notify( )挂起与恢复线程 第14章 文件和流 14.1 预备知识 14.2 实验1 文本浏览器 14.3 实验2 文本编辑器 14.4 实验3 成绩排队 14.5 实验4 用RandomAccessFile实现名片记录本 14.6 实验5 Zip的...

    java2实验实用模板代码

    实验3 挂起、恢复和终止线程 51 上机实践9 输入输出流 55 实验1 文件加密 55 实验2 给文件的内容添加行号 56 实验3 使用RANDOMACESSFILE类处理文件 58 实验4 对象的写入与读取 60 上机实践10 JAVA 中的网络编程 61 ...

    易语言程序免安装版下载

    操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. 数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写...

    操作系统(内存管理)

    本节将向您展示 malloc 和 free 的一个最简化实现的代码,来帮助说明管理内存时都涉及到了哪些事情。 要试着运行这些示例,需要先 复制本代码清单,并将其粘贴到一个名为 malloc.c 的文件中。接下来,我将一次一个...

    Oracle9i的init.ora参数中文说明

    说明: 指定多个监听程序的地址是分别指定的, 还是用一个 ADDRESS_LIST 字符串指定。如果该值为 TRUE, MTS_LISTENER_ADDRESS 参数可被指定为: (ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(PORT=5000)(HOST=zeus)) ...

Global site tag (gtag.js) - Google Analytics