Java多线程 应用场景
来源:互联网 发布:淘宝超级链接怎么做 编辑:程序博客网 时间:2024/05/18 03:43
1.服务器向客户端传递消息
在此应用场景的时候 需要保证100%的发送给客户端,那么发给客户端之后,客户端返回一个消息告诉服务器,已经收到。当服务器一直没有收到客户端返回的消息,那么服务器会一直发送这个信息,直到客户端发送回确认信息,这时候再删除重复发送的这个信息。
为了模拟这个场景,这里写两个线程,一个是发送,一个是接收,把发送的信息,要保存到线程安全的对象里面,防止发生线程安全问题,这里采用concurrenthashmap。
1.1 发送线程代码
package site.onel.thread; import java.util.Map.Entry; public class PushThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub try { sleep(6000); while(MainThread.pushmessage.size()>0){ //重发消息 for(Entry<Integer, String> hashMap:MainThread.pushmessage.entrySet()){ System.out.println("消息id:"+hashMap.getKey()+"未发送成功,在此重发:"+hashMap.getValue()); } sleep(1000); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
1.2 删除线程代码
package site.onel.thread;import java.util.Map.Entry;public class RemoveThread extends Thread { @Override public void run() { // TODO Auto-generated method stub try { for (int i = 0; i < 10000; i++) { sleep(2000); for(Entry<Integer, String> map:MainThread.pushmessage.entrySet()){ if (map.getKey()==i) { System.out.println("成功收到id为:"+map.getKey()+"返回的信息,删除该元素"); MainThread.pushmessage.remove(map.getKey()); } } System.out.println("内存对象中的元素数量为:"+MainThread.pushmessage.size()); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
1.3 程序入口 线程启动 代码
package site.onel.thread;import java.util.concurrent.ConcurrentHashMap;public class MainThread extends Thread{ public static ConcurrentHashMap<Integer, String> pushmessage=new ConcurrentHashMap<Integer,String>(); public static void main(String[] args) { for (int i = 0; i < 10; i++) { pushmessage.put(i, "该消息是id为"+i+"的消息"); } Thread pushThread=new PushThread(); Thread remove=new RemoveThread(); pushThread.start(); remove.start(); for (int i = 10; i < 20; i++) { pushmessage.put(i, "又一波到来,消息是id为"+i+"的消息"); } }}
阅读全文
0 0
- Java多线程应用场景
- Java多线程 应用场景
- Java多线程的应用场景
- Java多线程的应用场景
- java 多线程应用场景叙述
- JAVA多线程系列需求应用场景1
- JAVA多线程的应用场景和应用目的举例
- JAVA多线程的应用场景和应用目的举例
- JAVA多线程的应用场景和应用目的举例
- 多线程的应用场景
- 多线程的应用场景
- 多线程应用场景
- 多线程的应用场景
- 多线程的应用场景
- 多线程应用场景
- 多线程的应用场景
- 多线程的应用场景
- 多线程简单应用场景
- 偏方-VS不能更改Project的名字
- 抽象类和接口:
- Python多线程练习(threading)
- [ElasticSearch2.x]Filter之Filter原理
- ThinkPHP数据集
- Java多线程 应用场景
- 不错的linux下通用的java程序启动脚本
- IDEA远程调试Tomcat热替换
- NULL知识
- adb remount失败的一种解决办法
- golang.org/x/net/websocket 报错
- mysql 连接查询的详细讲解
- 线程总结(一)
- git项目迁移的两种方式