2024-03-15 23:13:13 | 我爱编程网
此种情况下是因为有线程尚未结束。一般有下面几种情况:
使用了定时器:java.util.Timer。定时器在运行时,程序是无法结束的,需要cancel才可以。
使用图形界面。比如new JFrame()并显示后,需要通过setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)设置JFrame的关闭行为为销毁,这样才能保证界面线程被清掉。(Java的默认行为是隐藏,但不销毁,可能是为了使用者可以再次显示窗口)
有死循环的代码。比如:while(true){ Thread.sleep(200);}
有死锁的线程。比如:多个线程等待同一把锁,且锁只通知了一次。
一直运行的最好方式是,做成socketServer,一直循环监听,我爱编程网
利用服务器推送技术去不断的访问client的文件,来判断是否被修改。
可是这样专业化的制作,工程量就大了。
还是看你的需求,如果不是项目要求的话,自己写的test的话,可以用SVN版本控制管理工具啊。只需要简单的配置就可以大家共享文件,还可以检查是否被更改,以及每个版本都会被记录和找回,很方便的
1,保证主线程阻塞,即在执行main方法里添加阻塞代码。
2,比如Java做服务器时,接收soket信息,
ServerSocket serverSocket =newServerSocket(10086);//1024-65535的某个端口
//2、调用accept()方法开始监听,等待客户端的连接
while(true){}
Socket socket = serverSocket.accept();
//3、获取输入流,并读取客户端信息
InputStream is = socket.getInputStream();
InputStreamReader isr =newInputStreamReader(is);
BufferedReader br =newBufferedReader(isr);
String info =null;
while((info=br.readLine())!=null){
System.out.println("我是服务器,客户端说:"+info);
}
}
3,添加阻塞代码:
Semaphore semaphore = new Semaphore(0);
try {
semaphore.acquire();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这段代码是不占cpu的。它会让出cpu的执行权。
2024-03-02 02:58:47
2024-01-01 09:58:48
2024-01-26 10:37:53
2024-03-04 07:43:42
2024-01-17 23:29:33
2024-01-01 04:24:22