这段时间做了个小系统:通过建议一个HTTP服务来获取传送到servlet的url里面的参数信息,然后再将信息打包通过UDP协议转发到服务器上面。由于采用的端口是唯一而且固定的,而且利用socket通信的时候要充分考虑到端口占用情况,因此必须解决通信过程中的同步问题。
开始尝试用多线程锁机制来解决问题。由于对锁机制不是太熟悉,因此老是发生第一个线程处理完后无法唤醒其他线程的情况。最后通过单态模式解决了次问题。代码如下:
单态类:Singleton
public class Singleton {
private static Singleton instance;
private DatagramSocket socket;
private String phoneNum;
private String resource;
private String url;
private static int count;
protected Singleton() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
public void set(String phoneNum, String resource, String url) {
this.phoneNum = phoneNum;
this.resource = resource;
this.url = url;
}
public void send() {
SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmss");
String datetime = f.format(new java.util.Date());
Buildsmp bp = new Buildsmp();
bp.setSmp023("106611331");
bp.setSmp021(this.phoneNum);
String content = "WM#" + this.resource + "#" + this.url;
bp.setSmp032(content);
bp.setSmp060(datetime);
String msg = bp.packSmp();
byte buffer[] = new byte[200];
buffer = msg.getBytes();// 包内容字节化
GetConfig con1 = new GetConfig();
ConfigBean config1 = con1.getConfigInfo();
try {
socket = new DatagramSocket(Integer.parseInt(config1.getPort()));
} catch (NumberFormatException e1) {
e1.printStackTrace();
} catch (SocketException e1) {
e1.printStackTrace();
}
InetAddress ia = null;
try {
ia = InetAddress.getByName(config1.getTarget_ip());
} catch (UnknownHostException e) {
e.printStackTrace();
}
int receive_port = Integer.parseInt(config1.getReceive_port());// 接收端端口
DatagramPacket sent_packet = new DatagramPacket(buffer, buffer.length,
ia, receive_port);// 实例化报文
try {
socket.send(sent_packet);
} catch (IOException e) {
e.printStackTrace();
}
socket.close();
count++;
System.out.println("count = " + count);
}
测试类:Test
public class Test {
private static String mobileNo = "mobileNo";
private static String resourceURL = "resourceURL";
private static String resourceName = "resourceName";
public static void main(String[] args) {
for (int i = 0; i < 1024; i++) {
Singleton s = Singleton.getInstance();
s.set(mobileNo, resourceName, resourceURL);
s.send();
}
}
}
最后:祝贺自己的第一篇原创帖。呼唤大侠给个用线程实现的好例子或者思想,小弟在此谢过
分享到:
相关推荐
综上所述,Java实现的单态登录涉及单态模式、会话管理、跨域共享、过滤器、分布式环境下的同步以及安全性考虑等多个方面。实际开发时,应根据项目需求选择合适的方法和工具进行实现。提供的压缩包文件...
在单态登录场景下,这个ID必须在所有关联的应用间同步。 4. **登录拦截器/过滤器**:为了实现单态登录,需要在用户尝试访问其他应用时进行拦截。这通常通过Servlet Filter或者Spring MVC的Interceptor实现。当检测...
设计模式是在长期软件开发过程中提炼出来的最佳实践,它们提供了一种标准化的方式用于解决特定类型的问题。对于Java开发者而言,熟悉并掌握各种设计模式是非常重要的,其中单态设计模式(通常称为单例模式)是一种...
这种模式的出现主要是为了解决对象创建的控制问题,特别是在某些需要频繁创建和销毁的对象中,单态模式能有效地提高性能,减少系统资源的消耗。 在Java中,单态模式的实现通常有两种常见方式:饿汉式和懒汉式。饿汉...
单态登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在Web开发领域,尤其是使用JSP和JavaWeb技术栈时,单态登录对于构建大型、多模块的...
是个使用java实现的单态例子,开始接触java单态的或是不了解单态是怎么实现的同僚,是个不错的参考
单态模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在.NET环境中,无论是C#还是ASP.NET项目,单态模式都是经常被用到的设计模式之一,尤其在处理全局配置、...
单态模式(Singleton Pattern)是软件设计模式中的一种,它保证了类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、缓存管理和日志记录等,因为它可以确保在整个系统中...
为了解决懒汉式的线程安全问题,有以下两种方式: - **同步方法**:在`getInstance`上添加`synchronized`关键字,保证多线程环境下的安全性,但会降低效率。 ```java public class Singleton { private static ...
这个一个简单的java例子,可以为新手加深对java单态模式的理解.....
- 如果单态对象具有状态,那么必须确保状态的一致性,否则可能会引发问题。无状态的单态更适合工具类和轻量级的全局共享对象。 总的来说,单态模式是一种强大的设计模式,但使用时应权衡其优缺点,并根据具体应用...
- 单例模式的线程安全问题:在多线程环境下,需要确保`GetInstance()`方法是线程安全的,可以使用互斥量(`CSingleLock`或`CWinThread::LockThreadCount`)来同步访问。 - 销毁单例:确保在程序结束时正确销毁单例...
单态模式的定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在项目的很多地方都会用到它,比如说数据库的链接。 使用Singleton的好处还在于可以节省内存,因为它限制了实例...
2. **线程安全的实现**:为了解决多线程问题,可以使用`lock`关键字或`System.Threading.ThreadStatic`属性。例如,使用`lock`关键字实现线程安全的经典单态: ```csharp public class Singleton { private static ...
单态模式(Singleton ...总的来说,单态模式是一种常见的设计模式,它在许多场景下能提供简洁有效的解决方案,但也需要谨慎使用,以避免过度设计和潜在的问题。理解和掌握单态模式对于提升软件设计水平至关重要。
单态模式(Singleton ...总结,单态模式是一种常用的软件设计模式,它能有效地控制资源的分配和使用,但在设计时也需要注意其可能带来的问题,如扩展性和并发处理。在实际开发中,应根据具体需求选择合适的设计模式。
总结来说,基于ActiveX控件技术的B/S模式单态登录方法是通过结合C/S模式的网络通信技术,解决B/S模式下多用户登录同一系统可能导致的通信错误和安全问题。它利用ActiveX控件实现了客户端与服务器的直接通信,增强了...
单态模式是在面向对象设计中实现类似单例行为的一种替代方法,确保Java应用程序中的共享状态。它强制实现一种独特的行为,即类的所有实例共享相同的状态。与单例模式不同,单例模式将类限制为单个实例,单态模式允许...
它们各自解决了不同的问题,但在确保对象创建和管理方面提供了有力的支持。 **单态模式(Singleton Pattern)** 单态模式是一种创建型设计模式,其核心在于保证一个类只有一个实例,并提供一个全局访问点。这种模式...
有利于学习和掌握单态模式,是我们学习的关键