我正在查看Brian Goetz撰写的"Java Concurrency in Practice"中的代码示例.他说这段代码可能会保持无限循环,因为"'ready'的值可能永远不会对读者线程可见".我不明白这是怎么发生的......
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready)
Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
Run Code Online (Sandbox Code Playgroud) 如果我想测试一组多播IP程序(发送器/接收器)而不必设置网络,可以在同一个盒子上完成吗?如果是这样,需要设置或完成哪些不同的操作?
我正在尝试构建一个依赖于Boost的应用程序.所以我将Boost 1_41_0下载到我的Linux盒子中,然后按照Boost站点上的Unix变种说明进行操作, http://www.boost.org/doc/libs/1_41_0/more/getting_started/unix-variants.html.
他们基本上建议我运行./bjam install,我做了.构建成功完成.但是,库名称似乎与上面的文档中描述的Boost命名约定不匹配,以及我正在尝试构建的应用程序的makefile中指定的内容.
我注意到我可以为bjam指定一些选项,我尝试使用这些选项,但不管发生了什么,我似乎都无法做到这一点.我的理解是库应该进入$ BOOST_ROOT/lib目录.这是库出现的地方,但命名为:
libboost_thread.a
libboost_thread.so
libboost_thread.so.1.41.0
Run Code Online (Sandbox Code Playgroud)
我希望它们被命名为libboost_thread-gcc41-mt-d-1_41_0或类似的东西.
我试过./bjam --build-type = complete --layout = tagged,我看到:
libboost_thread.a
libboost_thread-mt.a
libboost_thread-mt-d.a
libboost_thread-mt-d.so
libboost_thread-mt-d.so.1.41.0
libboost_thread-mt-s.a
libboost_thread-mt-sd.a
libboost_thread-mt.so
libboost_thread-mt.so.1.41.0
libboost_thread.so
libboost_thread.so.1.41.0
Run Code Online (Sandbox Code Playgroud)
所以,我不确定我是否应该创建舞台我的-L目录?有没有更详细地描述这个的文件?
我有一个在Tomcat下运行的java应用程序.相当简单的体系结构 - 用户通过HTTP调用servlet,然后将请求放入内存队列中.作为ServletListener启动且正在运行的消费者线程轮询队列并处理请求,包括调用一些存储过程并通过套接字连接向后端系统发送一些数据.
我可能需要将代码移植到C#.我想弄清楚的是微软领域的等效技术是什么,这将使我能够构建相同的系统.将代码从Java移植到C#将是微不足道的,但我似乎无法找到来自MS的应用程序服务器技术,这将允许我放入我的代码然后声明性地指定我想要一个新的"servlet"对于每个HTTP调用,我需要在同一个进程中运行"守护进程"线程等...
有什么建议?我不熟悉MS风景......