java无限线程

发布于 2024-12-18 08:12:38 字数 624 浏览 0 评论 0原文

我需要一个线程来检查 JAVA 桌面应用程序上的网络连接可用性。我有一个像这样的线程

    class DataSyncThread extends Thread {
     DataSyncThread() {
     }

     public void run() {
         while(true){
            try{
                System.out.println("Checking for network");
                InetAddress addr = InetAddress.getByName(host);
                if(addr.isReachable(MIN_PRIORITY)){
                    syncData();
                }
                this.sleep(1000000);
            }catch(Exception e){}
         }
     }
 }

现在,当我在构造函数中调用它时,应用程序永远不会加载。当我查看控制台(我触发从其中加载 jar )线程工作时,它会在控制台中打印“检查网络”。

帮助赞赏

I need to have a thread which checks for network connection availability on a JAVA desktop app. I got a thread like this

    class DataSyncThread extends Thread {
     DataSyncThread() {
     }

     public void run() {
         while(true){
            try{
                System.out.println("Checking for network");
                InetAddress addr = InetAddress.getByName(host);
                if(addr.isReachable(MIN_PRIORITY)){
                    syncData();
                }
                this.sleep(1000000);
            }catch(Exception e){}
         }
     }
 }

Now when I call this in the constructer the app never loads. when I look into the console (I trigger the jar to load from it) the thread work, it prints "Checking for network" in the console.

help appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流绪微梦 2024-12-25 08:12:38

我的猜测是,您正在做类似的事情:

DataSyncThread thread = new DataSyncThread();
thread.run();

这将同步运行run()方法。您应该调用 start() 来创建一个单独的执行线程:

DataSyncThread thread = new DataSyncThread();
thread.start();

我还建议实现 Runnable 而不是扩展 Thread - 或者很可能如果您希望定期执行,请使用 Timer 代替。我希望你的真实代码也记录在你的 catch 块中......

My guess is that you're doing something like:

DataSyncThread thread = new DataSyncThread();
thread.run();

That will run the run() method synchronously. You should be calling start() to create a separate thread of execution:

DataSyncThread thread = new DataSyncThread();
thread.start();

I would also recommend implementing Runnable instead of extending Thread - or quite possibly using a Timer instead, given that you want periodic execution. I hope your real code has logging in your catch block, too...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文