`
kongweile
  • 浏览: 516258 次
  • 性别: 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语言还是Java,实现多线程都需要理解线程的创建、调度、同步和通信。通过合理利用线程,开发者可以编写出更高效、响应更快的应用程序,充分利用现代计算机的多核优势。在实际开发中,应根据需求...

    JAVA100例之实例66 实现对线程的控制,中断、挂起、恢复、停止

    线程控制是Java多线程编程中的重要概念,包括中断、挂起、恢复和停止。本实例将深入探讨这些主题,帮助你更好地理解和掌握Java中线程的高级操作。 1. **线程中断**: Java通过`Thread.interrupt()`方法提供线程...

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

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java多线程-Thread类的常用结构及线程优先级

    Java多线程编程是开发高并发应用的基础,其中Thread类是实现多线程的核心类。本文将详细解析Thread类的常用结构以及线程优先级。 一、Thread类的常用结构 1. 线程中的构造器 - `Thread()`:创建一个没有指定名称...

    Java 多线程介绍

    Java多线程是Java编程语言中的一个重要特性,它允许在单个程序中同时执行多个线程,从而提高程序的效率和响应性。本文将深入探讨Java多线程的基础概念、线程的生命周期以及一些关键的线程控制方法,如`suspend()`和`...

    Java多线程机制(示例)

    ### Java多线程机制详解与示例 ...通过上述介绍和示例,我们可以看到Java多线程机制的强大功能以及其实现的灵活性。合理地利用多线程机制可以显著提高程序的性能和响应能力,对于开发高效的应用程序至关重要。

    java多媒体与多线程处理实验

    9. **线程挂起与恢复**:`wait()`和`notify()`/`notifyAll()`方法用于线程间的同步通信,前者使线程进入等待状态,后者唤醒等待的线程。 10. **动画原理**:动画效果通常通过快速连续显示一系列图像实现,每帧图像...

    线程的挂起、唤醒和终止

    总结来说,理解并掌握线程的挂起、唤醒和终止是多线程编程中的基础技能。合理运用这些操作,可以实现更高效、更健壮的并发程序。在实际开发中,我们需要遵循最佳实践,避免使用已过时的线程控制方法,而是采用更安全...

    挂起和恢复线程的资源

    当一个线程挂起时,它不会释放任何已持有的锁,如果其他线程需要这些锁来继续执行,就会陷入等待,无法继续进行。因此,现在更推荐使用更安全的机制,如使用条件变量或等待/通知机制(如Java的`wait()`和`notify()`...

    线程的挂起与恢复,以及如何创建线程

    在Java中,`start()`方法可以再次启动一个已经终止的线程,但不能用于恢复挂起的线程。如果需要控制线程执行,可以使用`Future`和`ExecutorService`。`Future`表示异步计算的结果,`ExecutorService`负责执行任务。...

    JAVA网络编程及多线程

    4. **阻塞状态**:一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排队队列。 5. **死亡状态**:处于死亡状态...

    java多线程编程简介

    ### Java多线程编程知识点详解...Java多线程编程是一项强大的技术,它不仅可以显著提升程序的性能和响应性,还能简化复杂操作的实现。通过对多线程的理解和合理应用,开发者可以更好地构建高性能、高可用性的软件系统。

    Java实验9多线程设计.doc

    Java实验9主要关注多线程的设计与应用,涵盖了线程的基本概念、创建、管理与控制,以及线程同步和互斥。以下是对实验内容的详细解释: 1. **线程概念**: Java中的线程是程序执行的最小单位,一个进程中可以包含多...

    java多线程实验

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

    java线程同步及通信

    3. **线程挂起、恢复与终止**: 在Java中,可以通过调用线程的`sleep()`方法使其挂起一段时间,然后自动恢复。`Callme.java`的`call()`方法中就使用了`sleep()`。线程的终止通常由线程自己决定(通过`System.exit()...

    Java 实例 - 线程挂起源代码+详细指导教程.zip

    在Java编程中,线程是程序执行的基本单元,它允许应用程序...总之,理解和掌握Java线程挂起是提升多线程编程技能的关键。通过实践和不断学习,你将成为一个熟练的Java并发程序员,能够编写出高效、稳定的多线程应用。

    Java多线程的用法详解

    Java多线程是编程中一个重要的概念,特别是在开发高并发、高性能的应用程序时不可或缺。本文将详细解析Java中实现多线程的两种主要方式以及线程的生命周期。 1. 创建线程 在Java中,创建线程主要有两种方法: **...

    Java多线程完全概念题

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了代码的并发性和效率。在面试中,了解并掌握多线程的基本概念和技术是至关重要的。以下是一些关于Java多线程的关键知识点: 1. **线程同步**...

    java多线程

    ### Java多线程的核心概念与应用 ...综上所述,Java多线程为开发者提供了一个强大而灵活的工具箱,用于构建高性能、高响应的应用程序。理解和掌握Java多线程的基本原理和最佳实践对于开发高质量的Java应用至关重要。

    java_多线程开发

    Java多线程开发是编程领域中的重要组成部分,尤其在当今多核处理器的普遍使用下,理解和掌握多线程编程显得尤为重要。多线程允许程序同时执行多个任务,从而充分利用系统资源,提高程序的效率和响应速度。 在Java中...

Global site tag (gtag.js) - Google Analytics