【问题标题】:Session - timeout - idle handling Multi-treads in Java会话 - 超时 - 空闲处理 Java 中的多线程
【发布时间】:2012-10-11 17:20:51
【问题描述】:

我正在努力解决会话 - 超时 - 空闲处理 Java 中的多线程。

我有一个服务器和客户端应用程序通过 telnet 进行通信,我需要检查用户是否在一段时间内键入(任何内容)、单击(任何位置)或移动鼠标。

如果没有,用户将收到一个对话框提示,询问他是否要继续会话。 ...(如果没有,用户将在下一分钟左右自动注销。)

我的应用程序有多个线程。 ( - 每个线程一个用户)。所以我不确定如何以最好的(也是最简单的)方式来解决这个问题?

我知道这是一个广泛而牵强的问题,但我希望你们中的一些人能给我一个正确方向的指针或提示...:)

我有点希望有一种简单的方法可以检查: (有点伪代码:)

if (idle = true){
timer.start();
if (timer > 120sec)
displayWaringJFrame("Continue Session?  - YES or NO ?)
displayTimer.start();
if (displayTimer > 30sec)
application.user.closeSession()

...或类似的东西! :)

【问题讨论】:

    标签: java multithreading session timeout


    【解决方案1】:

    最简单的解决方案是类 java.lang.Thread。

    你可以创建类并实现接口Runnable

    public class Session implements Runnable{
        public void run(){
            //your code
        }
    }
    

    在主函数中创建类Thread并作为构造参数设置Session类的实例,在此重要的是调用方法.start()

    public static void main(String args[]){
        new Thread(new Session()).start();
    }
    

    使用线程更方便的方法是 java.util.concurrent.ExecutorService 和 java.util.concurrent.Executors

    【讨论】:

      【解决方案2】:

      一些想法:
      1. 如果你想要一个持久的计时器,你可以使用像Quartz 这样的库,然后你可以在一段时间后运行你编写的作业类。您可以取消预定的工作,重新安排等...
      2. 您不一定需要每个用户都有一个线程才能工作。计时器对象通常具有处理工作负载的内部线程,可以使用 Quartz 或仅内存的 Java 计时器。

      【讨论】:

        猜你喜欢
        • 2012-02-17
        • 1970-01-01
        • 2013-06-18
        • 2022-08-17
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-10
        相关资源
        最近更新 更多