udp-关于UDP和TCP客户端单例的多线程问题

问题描述

关于UDP和TCP客户端单例的多线程问题
要求是客户端这边需要一个UDP客户端发送心跳包和一个TCP客户端提供一个可以向TCP服务器发送消息的接口( 要求长连接 )。
需要两个线程来维护这两个单例的客户端。
现在问题就来了,我对于多线程这方面不是特别懂,怎样开启两个线程启动两个客户端,并且TCP客户端的线程开启之后,调用接口之后就可以向服务端发送TCP消息(TCP是长连接,所以这个单例也要一直在运行)。然后就是UDP这块,也需要开启一个线程来持续向服务端发送心跳包。
我用的是MINA写的客户端,但是如何开启分配线程,并且在单例模式下来实现这个功能呢?

时间: 2024-09-17 16:19:30

udp-关于UDP和TCP客户端单例的多线程问题的相关文章

在JAVA中使用DCL双检查锁机制实现单例的多线程安全

元旦放假期间学代码,我都感动我自己啦. 试过了,OK的. package demo.thread; public class MyObject { private static MyObject myObject ; private MyObject() { } public static MyObject getInstance() { try { if (myObject != null){ } else { Thread.sleep(3000L); synchronized (MyObje

java单例问题?

问题描述 N个客户机掉一个单例会不回使系统性能下降.java单例是多线程.我还是有点不明白这个, 解决方案 有同步,就会慢下来.没有,就不会,而且有可能会被HotSpot优化后,跑的更快.解决方案二:首先N个客户机掉一个单例并不意味着他们调用的是同一个对象,而单例更多的是每个客户机进入以后先实例化一个对象,然后存在于这个客户机访问的这个生命周期.你多线程访问同一个对象很不安全,如果其中有一个释放他的内存空间,那么所有的都得重新再去获得,这在应用中显然是不可能的!这是自己的见解,希望牛人提点!解决

C++单例懒汉式和多线程问题(MUTEX 保护)

单例懒汉式和多线程问题 作为单例模式,是在整个程序运行期间只会建立一份内存空间,为了达到这个目标 1.需要将构造函数设置为私有成员 2.需要一个私有的静态指针指向自身 3.需要一个公有的静态函数将这个上面的静态指针露出来 如下的代码就是一个懒汉式的单例 点击(此处)折叠或打开 #include<iostream> using namespace std; class single_ins { private:     int a;     int b;     single_ins()    

网络编程-C# 使用TCP UDP混合实现即时通讯(QQ为例)

问题描述 C# 使用TCP UDP混合实现即时通讯(QQ为例) 我的思路是这样的 用户使用UDP IP 端口进行登录 此时开始计时 X秒 X秒内 未收到服务器的确认消息弹出登陆超时 X秒中服务器作出响应 登录失败即显示失败原因 若成功即 建立TCP连接 此时 窗口由登陆界面变成个人面板 上面包含好友列表 等信息 关键问题是!!!当QQ123456想要和QQ456789进行消息互发时 QQ123456发出的消息为Contact:123456|hello!|456789 服务器 想要将此消息转发给4

golang实现简单的udp协议服务端与客户端示例_Golang

本文实例讲述了golang实现简单的udp协议服务端与客户端.分享给大家供大家参考,具体如下: 其实udp没有什么服务端和客户端的概念了,只是一个发一个收而已,只是这样较方便能识别和理解. 服务端: 复制代码 代码如下: package main import (     "fmt"     "net" ) func main() {     // 创建监听     socket, err := net.ListenUDP("udp4", &am

Ruby设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你 分析数据,但是Ruby原生带有的puts方法却很少在真正的项目开发中使用. 为什么作为Ruby新 手神器的puts,到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比 如不可控制,所有的日志都会在项目上线后照常打印,从而降低运行效率:又或者不能将日志记录到本 地文件,一旦打印被清除,日志将再也找不回来:再或者打印的内容没有Tag区分,你将很难辨别这一 行日志是在哪个类里打印的. 你的

浅谈Java编程中的单例设计模式_java

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像findbugs等代码检查工具还会认为使用System.out.println()是一个bug. 为什么作为Java新手神器的System.out.println(),到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比如不可控制,所有的日志都会在项目上线后照常打印,从而降低运

关于将socket对象作为单例类的成员变量

问题描述 业务场景:1.系统在初始化时创建Socket对象(客户端)2.将创建的Socket对象作为系统全局变量,共其他方法使用.我的实现思路方法大致如下://系统初始化类publicclassInitialize{publicvoidinit(){Socketsocket=newSocket(ipAddress,port);//创建socket连接SocketSingleIntancessi=SocketSingleIntance.getSingleIntance();//将socket交由单

Singleton(单例)模式和Double-Checked Locking(双重检查锁定)模式

问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志.那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的.在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用了,是的,不错.但是,我所在的开发部门的C++编码规范是参照Google的编码规范的. 全局变量在项目