这似乎是一个疏忽错误,但我似乎无法找到原因.使用logback/slf4j进行日志记录(最新版本为slf4j-api-1.6.1,logback core/classic 0.9.24).最简单的测试日志配置是:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
<pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
每个日志设置都以logback的内部状态行开头:
11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] …Run Code Online (Sandbox Code Playgroud) 可能重复:
增加java中锁的数量的最佳方法是什么
假设我想基于整数id值进行锁定.在这种情况下,有一个函数可以从缓存中提取值,并且如果值不存在则执行相当昂贵的检索/存储到缓存中.
现有代码未同步,可能会触发多个检索/存储操作:
//psuedocode
public Page getPage (Integer id){
Page p = cache.get(id);
if (p==null)
{
p=getFromDataBase(id);
cache.store(p);
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是同步id上的检索,例如
if (p==null)
{
synchronized (id)
{
..retrieve, store
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为2个单独的调用可以具有相同的Integer id值但是具有不同的Integer对象,因此它们不会共享锁,并且不会发生同步.
有没有一种简单的方法可以确保您拥有相同的Integer实例?例如,这会工作:
syncrhonized (Integer.valueOf(id.intValue())){
Run Code Online (Sandbox Code Playgroud)
Integer.valueOf()的javadoc似乎意味着您可能会获得相同的实例,但这看起来不像是一个保证:
返回表示指定int值的Integer实例.如果不需要新的Integer实例,通常应优先使用此方法,而不是构造函数Integer(int),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能.
那么,关于如何获得保证相同的Integer实例的任何建议,除了更精细的解决方案,比如保持Lock对象的WeakHashMap键入int?(没错,看起来似乎必须有一个明显的单行而不是我错过了).
有没有办法在spring中设置属性,而不是类的实例,而是类对象本身?即
而不是
<bean>
<property name="prototype" class="a.b.c.Foo">...
Run Code Online (Sandbox Code Playgroud)
给你一个"Foo"的例子,类似于:
<bean>
<property name="prototype" class="java.lang.Class" value="a.b.c.Foo.class"...
Run Code Online (Sandbox Code Playgroud)
编辑:到目前为止最好(工作)的解决方案 - 使用正常的实例化并在setter中派生类.在解决方案方面,我认为我们将其描述为"作弊":
<bean class="Bar">
<property name="prototype" class="a.b.c.Foo">...
public class Bar{
public void setPrototype(Object o){
this.prototypeClass=o.getClass();
Run Code Online (Sandbox Code Playgroud)
编辑:dtsazza的方法也适用.
编辑:pedromarce的方法也适用.
有点新手问题,但我在Haskell的教程示例中遇到了这个例子.对于"查找列表的最后一个元素",有一些明显的版本,比如
last' [x] = x
last' (_:xs) = last' xs
Run Code Online (Sandbox Code Playgroud)
但我无法理解所提出的替代版本:
myLast' = foldr1 (const id)
Run Code Online (Sandbox Code Playgroud)
所以,在尝试理解id函数的应用程序正在做什么时,我尝试了ghci:
const id 1 2 -> gives 2
Run Code Online (Sandbox Code Playgroud)
这绑定如下:
(const id) 1 2 -> gives 2
Run Code Online (Sandbox Code Playgroud)
而不是这样的:
const (id 1) 2 -> gives 1
Run Code Online (Sandbox Code Playgroud)
但我没理解这一点.(const id)应该翻译成类似的东西
`(\x y->x) (\x->x)`
Run Code Online (Sandbox Code Playgroud)
这不应该返回一个只返回其第一个元素的id的函数吗?或者,函数顺序(const id)与const的行为有何不同?
以下是什么解释:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
Run Code Online (Sandbox Code Playgroud)
编译器接受语句1.语句2由编译器标记为"通用数组创建".
我已经看到一个关于禁止泛型数组的一个很好的解释是这个,认为由于数组是协变的,而泛型不是你可以破坏泛型类型,如果你允许泛型数组.
撇开关于这种语言是否应该极端地在泛型的处理方面造成这种复杂的不一致性的争论,无论你怎么努力都不让自己开枪(如果有人知道关于亲戚的任何好的讨论)问题的优点/缺点请发帖,我有兴趣看看论点),如果(2)不是,为什么要声明(1)?
显然oracle似乎没有区分空字符串和空值.例如
Select name from TABLE_A where id=100;
ID NAME
100 null
Update TABLE_A set NAME='' where id=100;
SELECT -->
ID NAME
100 null
SELECT length(NAME) FROM TABLE_A WHERE id=100;
null
Run Code Online (Sandbox Code Playgroud)
我想不出有什么理由可以建立Oracle以这种方式运行(它是否也在sqlplus中执行此操作? - 我通过java接口访问,引用的文章使用了php客户端).
难道你至少不想区分0长度和未定义长度吗?这是一个已知的问题?某些特定目的的故意行为?数据库理论中长期存在的争议?是什么赋予了?
(这是Matt Solnit对这个问题的回答.)
尝试从字符列表中生成映射到其频率的唯一字符列表 - 例如:
List('a','b','a') -> List(('a',2), ('b',1))
Run Code Online (Sandbox Code Playgroud)
所以,只是在控制台中乱窜,这有效:
val l = List('a', 'b', 'c', 'b', 'c', 'a')
val s = l.toSet
s.map(i => (i, l.filter(x => x == i).size))
Run Code Online (Sandbox Code Playgroud)
但是,仅通过组合最后2行缩短不?
l.toSet.map(i => (i, l.filter(x => x == i).size))
Run Code Online (Sandbox Code Playgroud)
给出错误"缺少参数类型".
有人可以解释为什么Scala会抱怨这种语法吗?
我已经看到了对此问题的其他引用,例如此处和此处,尽管这些引用了不同版本的Netty.尝试使用4.0分支(4.0.29)和5.0 alpha分支(5.0-Alpha3)中的最新版本.本地(非linux)jdk 1.8.040,很好.远程(Linux)与java jdk 1.8.025-b17得到100%的CPU.Linux内核版本2.6.32.
尝试使用 EpollEventLoopGroup();
试着打电话
workerGroup = new NioEventLoopGroup();
workerGroup.rebuildSelectors();
Run Code Online (Sandbox Code Playgroud)
有人可以提供任何建议吗?我已经看到了这个错误与不同版本的Netty的引用.Jdk bug?Netty bug?进程在启动时立即达到100%并保持在那里.
更新:升级到java 1.8.045,相同的区别.
所有可运行线程的JStack输出(那里有一些rabbitmq东西,仅包括完整性 - 这对其他应用程序来说很常见,并不是导致问题的原因).
在ruby中编写一些"学习语言"代码时,作为linkList实现的一部分,我遇到了这个警告:
在"添加"方法中,如果头部尚不存在,则创建头部,即
def add(value)
new_node=LinkedListNode.new(value)
if !@head
@head=new_node
else
self.find {|node| node.next ==nil }.next=new_node
end
end
Run Code Online (Sandbox Code Playgroud)
然后我收到警告
.../linked_list.rb:13: warning: instance variable @head not initialized
Run Code Online (Sandbox Code Playgroud)
我如何摆脱这个警告?这样做的惯用方法是什么?
关于Nashorn中的ENGINE_SCOPE和GLOBAL_SCOPE绑定有点困惑,试图按照这里的讨论.
在阅读本文之前,我对范围的理解(至少在rhino中)是GLOBAL_SCOPE中有一个共享的Bindings,以及每个引擎的ENGINE_SCOPE中的单个绑定.然而,这个页面似乎在说每个引擎都将基本的javascript构造存储在引擎ENGINE_SCOPE中存在的绑定中(令人困惑地称为"Nashorn全局范围").这听起来像是使GLOBAL_SCOPE绑定无效(因为它们无法访问任何这些基本结构).
我要做的是创建一个上下文,我可以注入一些脚本,然后在这些脚本的上下文中重复评估不同的绑定.但是,如果我可以访问的唯一上下文是单个引擎ENGINE_SCOPE(因为上面的任何内容都无法访问基本的javascript构造),那么似乎任何本地调用都必须添加到那些相同的绑定.有谁知道如何在Nashorn中管理多个级别的绑定?