`
pumpkin
  • 浏览: 7766 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

单态解决socket通信同步问题

阅读更多

这段时间做了个小系统:通过建议一个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实现的单态登陆

    综上所述,Java实现的单态登录涉及单态模式、会话管理、跨域共享、过滤器、分布式环境下的同步以及安全性考虑等多个方面。实际开发时,应根据项目需求选择合适的方法和工具进行实现。提供的压缩包文件...

    单态登录——只能在一个机器上登录(完整实例)

    在单态登录场景下,这个ID必须在所有关联的应用间同步。 4. **登录拦截器/过滤器**:为了实现单态登录,需要在用户尝试访问其他应用时进行拦截。这通常通过Servlet Filter或者Spring MVC的Interceptor实现。当检测...

    Java中单态设计模式

    设计模式是在长期软件开发过程中提炼出来的最佳实践,它们提供了一种标准化的方式用于解决特定类型的问题。对于Java开发者而言,熟悉并掌握各种设计模式是非常重要的,其中单态设计模式(通常称为单例模式)是一种...

    单态模式(PPT)

    这种模式的出现主要是为了解决对象创建的控制问题,特别是在某些需要频繁创建和销毁的对象中,单态模式能有效地提高性能,减少系统资源的消耗。 在Java中,单态模式的实现通常有两种常见方式:饿汉式和懒汉式。饿汉...

    单态登录的源代码

    单态登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在Web开发领域,尤其是使用JSP和JavaWeb技术栈时,单态登录对于构建大型、多模块的...

    java单态例子

    是个使用java实现的单态例子,开始接触java单态的或是不了解单态是怎么实现的同僚,是个不错的参考

    Net单态模式的案例

    单态模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在.NET环境中,无论是C#还是ASP.NET项目,单态模式都是经常被用到的设计模式之一,尤其在处理全局配置、...

    单态模式(代码)

    单态模式(Singleton Pattern)是软件设计模式中的一种,它保证了类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、缓存管理和日志记录等,因为它可以确保在整个系统中...

    MyEclipse\单态.rar

    为了解决懒汉式的线程安全问题,有以下两种方式: - **同步方法**:在`getInstance`上添加`synchronized`关键字,保证多线程环境下的安全性,但会降低效率。 ```java public class Singleton { private static ...

    简单的Java单态例子

    这个一个简单的java例子,可以为新手加深对java单态模式的理解.....

    单态模式的设计和应用

    - 如果单态对象具有状态,那么必须确保状态的一致性,否则可能会引发问题。无状态的单态更适合工具类和轻量级的全局共享对象。 总的来说,单态模式是一种强大的设计模式,但使用时应权衡其优缺点,并根据具体应用...

    mfc单态模式的例子

    - 单例模式的线程安全问题:在多线程环境下,需要确保`GetInstance()`方法是线程安全的,可以使用互斥量(`CSingleLock`或`CWinThread::LockThreadCount`)来同步访问。 - 销毁单例:确保在程序结束时正确销毁单例...

    JAVA设计模式(单态模式和简单工厂模式)

    单态模式的定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在项目的很多地方都会用到它,比如说数据库的链接。 使用Singleton的好处还在于可以节省内存,因为它限制了实例...

    .Net单态模式的案例

    2. **线程安全的实现**:为了解决多线程问题,可以使用`lock`关键字或`System.Threading.ThreadStatic`属性。例如,使用`lock`关键字实现线程安全的经典单态: ```csharp public class Singleton { private static ...

    设计模式一点通之单态模式

    单态模式(Singleton ...总的来说,单态模式是一种常见的设计模式,它在许多场景下能提供简洁有效的解决方案,但也需要谨慎使用,以避免过度设计和潜在的问题。理解和掌握单态模式对于提升软件设计水平至关重要。

    单态模式的练习

    单态模式(Singleton ...总结,单态模式是一种常用的软件设计模式,它能有效地控制资源的分配和使用,但在设计时也需要注意其可能带来的问题,如扩展性和并发处理。在实际开发中,应根据具体需求选择合适的设计模式。

    基于ActiveX控件技术的B/S模式单态登录方法

    总结来说,基于ActiveX控件技术的B/S模式单态登录方法是通过结合C/S模式的网络通信技术,解决B/S模式下多用户登录同一系统可能导致的通信错误和安全问题。它利用ActiveX控件实现了客户端与服务器的直接通信,增强了...

    【Java设计模式】单态模式

    单态模式是在面向对象设计中实现类似单例行为的一种替代方法,确保Java应用程序中的共享状态。它强制实现一种独特的行为,即类的所有实例共享相同的状态。与单例模式不同,单例模式将类限制为单个实例,单态模式允许...

    单态模式和工厂模式.ppt

    它们各自解决了不同的问题,但在确保对象创建和管理方面提供了有力的支持。 **单态模式(Singleton Pattern)** 单态模式是一种创建型设计模式,其核心在于保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    单态模式_Ok.ppt

    有利于学习和掌握单态模式,是我们学习的关键

Global site tag (gtag.js) - Google Analytics