小编Jim*_*Jim的帖子

tomcat关闭时关闭线程的正确方法是什么?

我试图在关闭 Tomcat 时关闭线程。
具体来说,我正在尝试关闭 log4j 看门狗(用于文件更改),并且我正在尝试关闭使用我的 Web 应用程序中的类的执行程序。
关闭时,我在 Catalina.out 中看到异常。
对于 Log4J,我看到:

信息:非法访问:此 Web 应用程序实例已停止
。无法加载 org.apache.log4j.helpers.NullEnumeration。
最终的后续堆栈跟踪是由出于
调试目的抛出的错误以及尝试终止
导致非法访问的线程引起的,并且没有功能影响。Throwable
发生:java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at org.apache .log4j.Category.getAllAppenders(Category.java:413)
在 org.apache.log4j.Category.closeNestedAppenders(Category.java:226)
在 org.apache.log4j.Hierarchy.shutdown(Hierarchy.java:467)
在 org.apache.log4j.LogManager.shutdown(LogManager.java:267) )
在 com.listeners.myListener$1.run(myListener.java:232)
线程“Thread-14”中的异常 java.lang.NoClassDefFoundError:
org.apache.log4j.helpers.NullEnumeration
在 org.apache.log4j.Category.getAllAppenders (Category.java:413)
at org.apache.log4j.Category.closeNestedAppenders(Category.java:226)
at org.apache.log4j.Hierarchy.shutdown(Hierarchy.java:467)
at org.apache.log4j.LogManager。关机(LogManager.java:267)

对于执行者部分:

信息:非法访问:此 Web 应用程序实例已停止
。无法加载 com.my.class.SomeClass。最终的
后续堆栈跟踪是由出于调试
目的抛出的错误以及尝试终止导致
非法访问的线程引起的,并且没有功能影响。Throwable发生:
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at Exception in thread “线程 13” java.lang.NoClassDefFoundError:
com.my.class.SomeClass

我做的是ServletContextListenercontextDestroyed我加入关闭挂钩如下:

public void contextDestroyed(ServletContextEvent …
Run Code Online (Sandbox Code Playgroud)

multithreading tomcat servlets log4j web-applications

5
推荐指数
1
解决办法
9057
查看次数

Log4j不会在删除时重新创建文件

我在Tomcat中有一个使用log4j进行日志记录的Web应用程序.
如果在Web应用程序运行时删除日志文件,则不会重新创建文件?
如何配置log4j以在删除时重新创建文件而无需重新启动Tomcat?

java linux logging tomcat log4j

5
推荐指数
1
解决办法
3432
查看次数

java如何选择在jsse中使用的最强密码?

我不明白Java如何选择最常使用的密码Server Hello.

我有一个Tomcat 5配置,我在SSL连接器中设置了 ciphers=TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, etc

服务器,即Java支持TLS_RSA_WITH_AES_128_CBC_SHA,Server Hello作为客户端支持的首选.但这并不是最安全的,并不是首选的http://docs.huihoo.com/java/javase/7/technotes/guides/security/SunProviders.html#SunJSSEProvider列出的TLS_RSA_WITH_AES_256_CBC_SHA首选项.
然后我认为是server.xml属性中的顺序产生了差异,我把另一个密码first(TLS_DHE_RSA_WITH_AES_256_CBC_SHA)放在我Client Hello支持的地方.但这也没有被选中,而是TLS_RSA_WITH_AES_128_CBC_SHA再次被选中.

那么JSSE如何选择偏好的密码呢?这是在某处记录的吗?我无法弄清楚这里发生了什么.

java security ssl tomcat jsse

5
推荐指数
1
解决办法
5567
查看次数

为什么在执行双重检查锁定时将volatile字段复制到局部变量

我正在阅读关于双重检查锁定的信息Effective Java.代码执行以下操作:

private volatile FieldType field;  
FieldType getField() {  
    FieldType result = field;  
    if (result == null) { // First check (no locking)  
        synchronized(this) {   
        result = field;  
        if (result == null) // Second check (with locking)  
            field = result = computeFieldValue();  
        }  
    }  
    return result;  
}    
Run Code Online (Sandbox Code Playgroud)

它说使用result似乎不需要但实际上确保field只在已经初始化的常见情况下只读取一次.

但我不明白这一点.与if(field == null)直接做什么有什么区别?我不明白为什么if (result == null)会有所不同,更不用说如上所述了.

java concurrency multithreading synchronization effective-java

5
推荐指数
2
解决办法
410
查看次数

试图了解同步队列的机制

我试图阅读同步队列的实现
对我来说并不是那么简单.它似乎使用链接列表,其中每个节点都与一个线程相关联.
核心部分使用旋转循环等待将任务放入队列中.
我想知道为什么使用旋转循环代替类似的东西wait/notify
现在,由于这个恒定的自旋循环,其中一个核心消失了,对吧?
我试图理解这一点,并粗略地了解同步队列的设计

更新令
我不安的是服务员线程如何启动/停止.

java concurrency multithreading nonblocking java.util.concurrent

5
推荐指数
1
解决办法
1811
查看次数

如何在bash中使用perl one liner?

我正在研究如何根据每个句子的长度对文件进行排序,我从这个答案中看到了这个片段

perl -ne 'push @a, $_ } { print sort { length $a <=> length $b } @a' input
                      ^ ^  
Run Code Online (Sandbox Code Playgroud)

我测试了它并且它有效,但我不知道它是如何工作的!据我所知,语法错误.它有一个开放的右支架和一个我已标记的非封闭右支架.
我真的很难弄清楚如何在bash中运行这样的perl命令
可以请一些人解释这个片段吗?

linux bash perl

5
推荐指数
3
解决办法
717
查看次数

memcached是如何更新的?

我以前从未使用过 memcached,并且对以下基本问题感到困惑。
Memcached 是缓存吧?我假设我们缓存数据库中的数据以便更快地访问。那么当DB更新时谁负责更新缓存呢?我们的代码是,当数据库更新时,memcached 是否“理解”?

memcached caching

5
推荐指数
1
解决办法
6629
查看次数

一长串if/else/execute代码分支的最佳设计模式/方法

我有一个"遗留"代码,我想重构.
代码基本上是对服务器的远程调用并获得回复.然后根据回复执行相应的.
代码骨架示例:

public Object processResponse(String responseType, Object response) {
    if(responseType.equals(CLIENT_REGISTERED)) {  
       //code  
       //code ...
    }  
    else if (responseType.equals(CLIENT_ABORTED)) {
       //code  
       //code....
    }    
    else if (responseType.equals(DATA_SPLIT)) {
      //code
      //code... 
   }  
   etc  
Run Code Online (Sandbox Code Playgroud)

问题是有许多if/else分支,并且每个内部的代码都不是微不足道的.
因此很难维护.
我想知道这个最好的模式是什么?
我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用反射调用与responseType同名的方法.
这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为反射会导致性能问题.
是否有一个很好的设计方法/模式来清理它?

java oop refactoring design-patterns

5
推荐指数
1
解决办法
282
查看次数

布谷鸟哈希中的"新哈希函数"是什么?

我正在阅读Pagh和Rodle的杜鹃哈希,我无法理解这一段的含义:

可能会发生此过程循环,如图1(b)所示.因此,迭代次数受第2.3节中规定的值"MaxLoop"的限制.如果达到了这个迭代次数,我们将使用新的哈希函数重新表达表中的键,并再次尝试使用无嵌套键.没有必要为重新分配分配新表:我们可能只是通过表来删除并执行通常的插入过程,所有键都发现不在表中的预期位置.

使用新的哈希函数意味着什么?
在插入算法中,调整表的大小.我们是否应该以某种方式使用散列函数的"池"?我们如何创建这个池?

algorithm hash performance dictionary hashtable

5
推荐指数
1
解决办法
731
查看次数

为什么在构造对象后Runtime.freeMemory()会显示更多内存?

我试图找出没有探查器的内存中哈希图的大小。所以我做了以下事情:

HashMap<Integer, String> map = new HashMap<Integer, String>();
long start = System.currentTimeMillis();
lotsOfGC();
long freeMemoryBeforeConstruction = Runtime.getRuntime().freeMemory();
System.out.println("memory before = " + freeMemoryBeforeConstruction);
for(int i = 0; i < numbers.length; i++) {
    String value = "value"+ i;
    map.put(i, value);
}
long end = System.currentTimeMillis();
lotsOfGC();
long freeMemoryAfterConstruction = Runtime.getRuntime().freeMemory();
System.out.println("memory after= " + freeMemoryAfterConstruction );
Run Code Online (Sandbox Code Playgroud)

lotsOfGC只是在哪里:

static void lotsOfGC() {
        for (int i = 0; i < 20; i++) {
            System.gc();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) { …
Run Code Online (Sandbox Code Playgroud)

java memory profiler memory-management

5
推荐指数
1
解决办法
447
查看次数