`
大_圣
  • 浏览: 17658 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

线程初步了解2

 
阅读更多

1.线程的监听模式.

由于每个线程都是由一个对象去实现的,所以当我们想要监听这些线程的时候,只需要将每个对象里的重要数据拿出来处理.所以,通常可以将这些对象放入一个队列中去,然后再将这个队列直接传给监听线程,而在监听线程中,我们又可以再将其有用的数据取出,完成某些特定的功能.当然,首先要保证的是监听线程是在要被监听线程之前被启用..

// 匿名内部类
		ActionListener l = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("开始")) {
					// 监听线程
					Listener l = new Listener(list); // list是存放Ball对象的队列
					l.start();

					// 创建小球线程
					Ball b = new Ball(jp, x);
					list.add(b);// 将线程存入队列中
					b.start();
				}

			}
		};

  

 

 

2.线程的控制.

昨天已经知道.为了使这个线程能一直持续的运行下去 , 通常会让run方法进入到一个死循环中... 

但如果我们要让这个线程结束呢 ?

本来JDk中是有个stop方法的,能够强行关掉一个线程,但是由于它的不安全性,所以通常不采用这个方法来结束一个线程.而又因为只要run方法中的代码都执行完,这个线程便会停止,因此.我们只要能够改变run方法中的死循环中的被判断条件的状态.当这个循环不再是一个死循环,而是一个可以执行完的循环时,, 那么,只要这个这些代码都执行完,这个线程也自然就停止活动了..

while (!isStop) {//isStop初始值为false
			while (!isPause) {//isPause初始值为false

				// 清除图像
				// 设置颜色为窗体的背景色
				g.setColor(bu.getContentPane().getBackground());
				g.fillOval(x0, y0, 30, 30);

				g.setColor(Color.BLUE);
				// 在内部类中使用外部的变量,必须定义成final
				g.fillOval(x0 += x, y0 += y, 30, 30);
				try {
					Thread.sleep(1000);// 沉睡时间,球移动位置的时间间隔
				} catch (Exception ef) {
					ef.printStackTrace();
				}

			}
			try {
				Thread.sleep(1);// 沉睡时间,暂停时的休眠
			} catch (Exception ef) {
				ef.printStackTrace();
			}
		}

 

这样,便可以通过修改isStop以及isPause的值来改变这个循环的状态

/**
	 * 暂停线程的方法
	 */
	public static void pauseThread() {
		isPause = true;
	}

	/**
	 * 继续线程的方法
	 */
	public static void resumeThread() {
		isPause = false;
	}

	/**
	 * 停止线程的方法
	 */
	public static void stopThread() {
		isPause = true;
		isStop = true;
	}

 

 

可以通过将这写方法在各个按钮的监听器中使用,, 从而改变条件式的真值,进而影响循环的状态,达到停止一个不再需要的线程的目的...

分享到:
评论

相关推荐

    多线程的了解,初步实现

    多线程的了解,初步实现

    初步了解线程

    初步了解线程 和画布的使用 对线程初学者有大用

    Ruby多线程编程初步入门

    ### Ruby多线程编程初步入门 #### 一、引言 多线程编程是现代软件开发中的重要组成部分,尤其对于需要高效并发处理的任务而言更是如此。Ruby作为一种灵活且功能强大的编程语言,在支持多线程方面提供了丰富的工具...

    线程监控工具,查找异常线程

    2. **线程堆栈跟踪**:提供线程当前执行的函数调用堆栈,帮助开发者了解线程执行的具体位置。 3. **性能指标**:监测CPU和内存使用情况,分析线程对系统资源的影响。 4. **事件分析**:记录线程间的同步事件,如锁的...

    一个初步的用VB写“多线程”程序的例子(9KB)

    标题中的“一个初步的用VB写“多线程”程序的例子”表明这是一个关于使用Visual Basic (VB)编程语言实现多线程技术的示例项目。多线程是计算机编程中的一个重要概念,允许程序同时执行多个任务,从而提高效率和响应...

    初步了解java编程语言

    2. **面向对象特性**: - 类与对象:Java基于类,类是创建对象的蓝图,对象是类的实例。 - 封装:通过访问修饰符(public, private, protected)实现数据隐藏,提供公共接口。 - 继承:一个类可以继承另一个类的...

    多线程同步利用ccriticalsection

    通过以上讲解,你应该对MFC中的`CCriticalSection`有了初步了解,并能开始在自己的多线程项目中运用这一同步机制。不过,记住,线程同步是一个复杂的话题,需要结合具体场景灵活运用,避免潜在的并发问题。

    .net开发人员面试题-多线程.pdf

    2. 提高响应速度:多线程可以使程序的响应速度更快,提高用户体验。 3. 简化编程:多线程可以使编程变得更加简洁和易于维护。 多线程的缺点 1. 增加复杂度:多线程可以增加程序的复杂度,难以维护和调试。 2. 资源...

    进程、线程查看工具

    了解如何查看和管理进程及线程,对于系统优化、问题排查以及软件性能分析具有重要意义。 进程可以理解为一个正在执行的程序实例,每个进程都有独立的内存空间,包括代码、数据、堆栈等。在Windows系统中,可以通过...

    directshow多线程视频采集

    虽然这与DirectShow和视频采集不直接相关,但提及它有助于了解管道过滤器在工业环境中的作用,可以与过滤器图中的某个环节进行类比,比如视频流中也需要过滤和清理以保证数据流的正常工作。 在DirectShow的多线程...

    socket linux c++ 多线程3

    .rar"则可能探讨了I/O完成端口(IOCP)技术,这是在Windows中实现高效率Socket服务器的一种方法,虽然不直接适用于Linux,但了解异步I/O和线程池的概念对于优化Linux下的多线程Socket服务器也很有帮助。 最后,"多...

    delphi线程入门示例

    通过以上讲解,你已经对Delphi中的线程编程有了初步了解。实践中,你可以创建一个简单的项目,包含一个`TThread`子类,并观察其运行效果,逐步加深理解。记住,线程虽好,但过度使用可能会导致复杂性和维护成本上升...

    多线程编程的入门教程

    ### 多线程编程的入门教程 ...通过以上内容的学习,相信你已经对多线程编程有了初步的认识,并且了解到了如何使用Win32API来进行多线程编程。在实际开发中,合理利用多线程能够极大地提升程序的性能和用户体验。

    注入 - 代码注入之远程线程篇 - C_C++_Python_Java - 博客园.pdf

    5. 注入技术的实现:文中虽然没有给出详细的代码实现,但作者通过描述创建远程线程和注入代码的过程,让我们对注入技术有了初步的了解。根据描述,我们了解到实现远程线程注入通常需要执行以下步骤: - 提升进程...

    java线程代码

    Java线程是Java编程中的重要概念,它允许程序并发执行多...通过以上讲解,你已经对Java线程有了初步了解,从创建线程到线程同步、通信、管理,以及线程的特殊特性。实践这些知识点,将有助于你在多线程编程中游刃有余。

    实例演示_消息线程_

    3. **线程安全通信**:了解如何在多个线程之间安全地交换数据,避免竞态条件。 4. **线程同步**:学习如何使用`Synchronize`和`Queue`方法在不同线程间同步代码执行。 5. **事件驱动编程**:理解如何通过消息队列和...

    oytk.rar_进程与线程

    在描述中提到的“这些程序分为服务器和客户端,使用Delphi开发,初步实现了QQ聊天功能”,这暗示了我们将探讨的是如何在多线程环境下构建分布式系统,比如服务器端负责处理多个客户端的并发请求。 **进程与线程的...

    Linux多线程服务端编程:使用muduo C 网络库

    通过阅读《Linux多线程服务端编程:使用muduo C++网络库》样章,读者可以对muduo库有一个初步的认识,并开始掌握如何在实际项目中应用这些技术。全书可能还涵盖了更多高级主题,如分布式系统、负载均衡、故障恢复等...

    简单了解Java Netty Reactor三种线程模型

    在这种模型中,Acceptor线程池专门处理客户端连接,完成初步的认证等操作,然后将连接注册到后端的子Reactor线程池,由子线程池的线程负责后续的读写操作。这可以进一步提升服务端处理能力,确保连接建立过程的性能...

Global site tag (gtag.js) - Google Analytics