`
做一行爱一行吧
  • 浏览: 23631 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java线程自己去取消息处理

    博客分类:
  • java
 
阅读更多

       这次说的就是想要线程自己去找事情做的一个方法,逻辑思想就是,当有人像我们的容器中放置一个新的消息,那么唤醒所有线程,这个时候取消息加锁并且位移+1,然后处理线程自己思考是否还有消息应该处理,如果没有进入等待空间,如果有责继续处理!

       (这种处理思想是考虑到线程共享内存的原理,否则是无法实现的

package threadtest2;

public class Main {
	public static void main(String[] args){
		Channel channel = new Channel(5);				//生成一个新的channel对象,设置容器线程量为5
		channel.startWorkers();							//开始所有的工作线程
		new ClientThread("Alice", channel).start();		//启动客户端模拟器来放置消息
		new ClientThread("Bobby", channel).start();		//同上
		new ClientThread("Chris", channel).start();		//同上
	}
}

 

package threadtest2;

public class Main {
	public static void main(String[] args){
		Channel channel = new Channel(5);				//生成一个新的channel对象,设置容器线程量为5
		channel.startWorkers();							//开始所有的工作线程
		new ClientThread("Alice", channel).start();		//启动客户端模拟器来放置消息
		new ClientThread("Bobby", channel).start();		//同上
		new ClientThread("Chris", channel).start();		//同上
	}
}

        这类的代码其实都是简单

package threadtest2;

import java.util.Random;
public class Request {
	private final String name;		//委托者名称
	private final int number;		//请求编号
	private static final Random random = new Random();	//生成一个随机数
	public Request(String name, int number){
		this.name = name;
		this.number = number;
	}
	
	/**work线程调用使用的解决方法,就是简单的显示**/
	public void execute(){
		System.out.println(Thread.currentThread().getName() + "executes" + this);
		try{
			Thread.sleep(random.nextInt(1000));
		}catch(InterruptedException e){
			
		}
	}
	
	public String toString(){
		return "[ Request from]" + name + "No." + number +"]";
	}
}

 

package threadtest2;

import java.util.Random;
public class Request {
	private final String name;		//委托者名称
	private final int number;		//请求编号
	private static final Random random = new Random();	//生成一个随机数
	public Request(String name, int number){
		this.name = name;
		this.number = number;
	}
	
	/**work线程调用使用的解决方法,就是简单的显示**/
	public void execute(){
		System.out.println(Thread.currentThread().getName() + "executes" + this);
		try{
			Thread.sleep(random.nextInt(1000));
		}catch(InterruptedException e){
			
		}
	}
	
	public String toString(){
		return "[ Request from]" + name + "No." + number +"]";
	}
}

 

package threadtest2;

import java.util.Random;

/**模拟客户端发送请求**/
public class ClientThread extends Thread{
	private final Channel channel;						//创建处理模块实例
	private static final Random random = new Random();	//生成随机数
	public ClientThread(String name, Channel channel){	
			super(name);								//继承线程类构造方法
			this.channel = channel;						
	}
	
	/**实现run方法**/
	public void run(){									
		try{
			/**该进程一直递增,并调用channel put方法来放置新的消息进去,然后随机休眠等待**/
			for(int i = 0; true; i++){
				Request request = new Request(getName(), i);
				channel.putRequest(request);
				Thread.sleep(random.nextInt(1000));
			}
		}catch(InterruptedException e){
		}
	}

}

        这中简单的小示例代码,经过我们的修改,可以制作成处理很复杂逻辑的代码版本,例如,我们将存储消息的数组加以分类,让线程按照类别去寻找消息处理等等!

分享到:
评论

相关推荐

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    java线程实战手册

    《Java线程实战手册》是Java并发编程领域的一份重要参考资料,主要针对Java开发者,旨在帮助他们深入理解和熟练掌握Java中的多线程技术。虽然这里只提供了第一章的内容,但这一章通常会涵盖基础理论和核心概念,对于...

    关于线程(java)两天的课件

    Java线程有五种基本状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。这些状态之间的转换是通过调用特定的方法,如start()、sleep()、join()、wait()、notify()等...

    java多线程分页查询

    ### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...

    多线程页面析取源码(JAVA实现)

    在Java编程中,多线程是一种常见的技术,用于提高程序的执行效率,特别是在处理大量并发任务时。在本项目“多线程页面析取源码”中,开发者使用了多线程来并行抓取网页内容,从而加速了数据获取过程。这个实现依赖于...

    JAVA 线程实现数据库的主从同步更新

    Java线程提供了异常处理机制,可以使用try-catch-finally块来捕获和处理异常。如果同步失败,可能需要回滚主数据库的事务,或者标记异常并尝试在后续同步周期中再次处理。 5. **性能优化**: 为提高同步效率,可以...

    JAVA多线程教材

    4. **线程优先级与守护线程**:Java线程有优先级之分,可以影响调度,但实际效果取决于操作系统。守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与...

    JAVA线程深入了解

    ### JAVA线程深入了解 #### 一、JAVA线程启动方式详解 ##### 1. 利用`Thread`类的子类启动线程 在Java中,可以通过继承`Thread`类来创建一个新的线程。这种方式相对直观,易于理解。具体做法是创建一个`Thread`类...

    Java线程安全问题_动力节点Java学院整理

    不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。...JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于java开发人员,要清楚在jvm内存模型的基础上,如果解决多线程的可见性和有序性。

    Java编写线程动画

    - **线程优先级**:Java线程具有优先级,但实际效果取决于操作系统的调度策略。 - **线程调度**:操作系统负责决定何时切换线程执行,Java提供了Thread.yield()和Thread.sleep()方法影响线程调度。 6. **实战示例...

    在Java中创建线程有两种方法

    在Java编程语言中,创建线程是实现并发执行任务的关键步骤。Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当...

    java多线程的应用事例

    线程的优先级也是重要概念,Java中的Thread类定义了线程优先级,但实际调度仍然取决于操作系统。优先级高的线程通常有更高的执行机会,但不保证。 此外,线程间的协作也是关键。wait()和notify()方法用于线程间通信...

    java程序 两个线程实现学生成绩的读写

    Java程序中的多线程技术是实现并发操作的关键,尤其在处理并发读写数据时,如在本例中,我们有两条线程分别负责读取和写入学生的成绩...通过学习这个程序,我们可以深入理解Java线程的使用以及并发编程中的核心概念。

    java多线程编程

    Java线程具有优先级,`Thread.NORM_PRIORITY`是默认优先级,可以通过`setPriority()`设置优先级。但优先级并不保证线程的执行顺序,因为线程调度取决于JVM和操作系统。 6. **线程池** Java的`ExecutorService`和`...

    java线程机制介绍

    Java线程的调度是通过操作系统的线程调度器来完成的,可以是抢占式调度或者合作式调度,具体取决于运行Java的平台。在Java中,线程的状态包括新建、可运行、运行、阻塞、等待、超时等待和终止。线程可以通过`sleep()...

    java多线程的使用和介绍

    - **Java中的线程模型**:Java线程模型主要基于`Thread`类和`Runnable`接口。创建线程有两种基本方法:继承`Thread`类或实现`Runnable`接口。 #### 多线程在.NET里如何工作? 在.NET框架中,线程通过`System....

    Java多线程运算集合

    - Java线程有多种状态:新建 (`NEW`)、就绪 (`RUNNABLE`)、阻塞 (`BLOCKED`)、等待 (`WAITING`)、超时等待 (`TIMED_WAITING`) 和终止 (`TERMINATED`)。 - **状态转换**: - 当线程被创建但尚未启动时,它的状态是...

    java oracle,多线程,综合应用示例

    首先,Java作为一种面向对象的编程语言,其多线程特性使得它在处理并发任务时表现出色。在Java中,我们可以使用`Thread`类或者实现`Runnable`接口来创建线程。多线程允许程序同时执行多个任务,提高系统资源的利用率...

    Java线程.zip

    中断和异常处理也是Java线程的重要方面。Thread类提供了interrupt()方法来中断线程,但线程是否真正停止取决于run()方法如何响应InterruptedException。通常,我们需要在run()方法中检查并处理中断标志,以优雅地...

Global site tag (gtag.js) - Google Analytics