我正在寻找任何教程/示例,其中显示了编写独立Java类的最佳实践,该类将像服务器一样运行(没有退出),并且可以通过从不同的调用发出另一个命令来停止JVM(有点像Tomcat服务器)。是在java.util.concurrent中查找类的最佳方法,因为有一些有趣的类,如CountDownLatch?一个例子真的很有帮助。感谢。
答案 0 :(得分:2)
不确定你在寻找什么。
这是一个简单的服务器,可以很高兴地计入MAXINT并再次返回,直到它停止。
您可以使用JConsole来阻止它。
Server.java
import javax.management.*;
import java.lang.management.*;
import java.util.concurrent.atomic.AtomicBoolean;
public class Server implements ServerMBean {
AtomicBoolean running;
public void register() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName serverBeanName = null;
serverBeanName = new ObjectName("ServerBean:name=TestBean");
mbs.registerMBean(this, serverBeanName);
}
public void stop() {
running.set(false);
}
public void runServer() throws Exception {
int cnt = 0;
running = new AtomicBoolean(true);
while(running.get()) {
Thread.sleep(1000);
System.out.println("tic tic " + cnt++);
}
}
public static void main(String args[]) throws Exception {
Server bean = new Server();
bean.register();
bean.runServer();
}
}
ServerMBean.java
public interface ServerMBean {
public void stop();
}
这会注册一个简单的JMX MBean,它有一个方法(停止),它将运行变量设置为“false”,从而停止循环。请注意,'running'是一个AtomicBoolean,因为这很重要。如果你使用普通的布尔值,很可能永远不会停止。它也可以使用volatile布尔值。
如果启动服务器(Java Server)然后启动JConsole,它将提供Server作为连接的进程。然后转到MBeans选项卡,找到ServerBean - > TestBean - >操作 - >在树视图中停止,然后单击停止按钮,服务器将停止。
你想要服务器做什么,我不知道。但这让你体会到可以做什么,什么,40行代码......
答案 1 :(得分:0)
JMX可以是远程控制Java应用程序的解决方案。此answer提供了用于关闭JVM的基于JMX的解决方案的详细信息。
请注意,JMX也可以通过网络控制您的应用程序。如果您不想冒恶意远程关机的风险,则必须secure the access to the JMX interface。虽然阻止访问JMX端口的防火墙规则在低风险环境中可能已经足够了。