我有任何给定时间运行的线程类的多个实例.我有log4j设置用于记录需求.
我需要一种方法来设置log4j,以便我的线程类的每个实例在不同的日志文件中输出其日志.
这是我做的(伪代码)
public class doSomething extends Thread {
private Logger d_logger;
public doSomething(int id){
d_logger = Logger.getLogger("doSomething"+id);
String logFileName = "doSomething"+id+".log";
Properties prop = new Properties;
prop.setProperty("doSomething"+id,"DEBUG, WORKLOG");
prop.setProperty("log4j.appender.WORKLOG","org.apache.log4j.FileAppender");
prop.setProperty("log4j.appender.WORKLOG.File", logFileName);
prop.setProperty("log4j.appender.WORKLOG.layout","org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.WORKLOG.layout.ConversionPattern","%d %c{1} - %m%n");
prop.setProperty("log4j.appender.WORKLOG.Threshold","INFO");
PropertyConfigurator.configure(prop);
}
public void run(){
d_logger.info("Starting to doSomething number" + id);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然上面为我实例化的每个线程创建了一个文件,但它不会向这些文件输出任何内容.任何帮助深表感谢.
我有一个Stack对象由多个线程处理.其中一个线程是一个工作线程,它对Stack对象执行pop操作.我想处理堆栈为空的情况,我看到两个选项
try{
Object obj = (Object) d_stackObj.pop();
}
catch (EmptyStackException e)
{ ...}
Run Code Online (Sandbox Code Playgroud)
要么
if( ! d_stackObj.empty() )
Object obj = (Object) d_stackObj.pop();
else
{ ...}
Run Code Online (Sandbox Code Playgroud)
我的问题是,上述哪种方法更好,为什么?
谢谢!
AtomicInteger是否提供任何公平保证?像先到先得的线程执行顺序呢?Victor Grazi同时动画的动画片例绝对没有表现出任何这样的公平性.我搜索过,但没有找到任何结论.
我正在尝试从MDX选择查询中的维度中过滤掉一些点。我已经使用了http://mondrian.pentaho.com/documentation/mdx.php中记录的Filter(,)函数。正在运行的MDX如下
SELECT {[Measures].[AMOUNT]} on 0,
{Filter ([DIM1].MEMBERS, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} on 3,
{[CURRENCY].[EUR]} on 4
from [CUBE]
Run Code Online (Sandbox Code Playgroud)
但是Measures.AMOUNT仍在考虑Dim1.A,Dim1.B和Dim1.C。能否请您指出我的语法有什么问题?我也尝试了Except(,)。
最好,罗汉
更新:
感谢Marc,为我指出了正确的方向。我进行了更多测试,发现Member函数还返回一个点“ All”,其中包括我维度上的所有点。因此,即使Filter()或Except()函数正确地过滤了点,“全部”点仍包含所有点的值,因此将它们包括在Measure.AMOUNT计算中。相反,我使用了Children函数,该函数未返回“ All”点,因此我看到了所需的结果。更新了下面的MDX
使用Filter和NOT IN来工作MDX(警告:NOT IN是Mondrian特定的操作)
SELECT {[Measures].[AMOUNT]} on 0,
{Filter ([DIM1].Children, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} on 3,
{[CURRENCY].[EUR]} on 4
from [CUBE]
Run Code Online (Sandbox Code Playgroud)
使用MDX除外
SELECT {[Measures].[AMOUNT]} on 0,
{except ( {[DIM1].Children}, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} …Run Code Online (Sandbox Code Playgroud)