写了两个简单的类。本来写这两个类的初衷是为了 验证 log4j 异步打印日志时的 MDC 衔接问题。但是由于疏忽,有个地方写错了。
public class TestLog { /** * @param args */ public static void main(String[] args) { for (int i = 1; i <= 5; i++) { LogThread lt = new LogThread("aaa_" + i); lt.setName("aaa_" + i); lt.start(); } } }
public class LogThread extends Thread{ String message; private Logger log = Logger.getLogger(this.getClass().getName()); public LogThread(String tranId) { this.message = tranId; MDC.put("tranId", message); } @Override public void run() { log.info(message+"_"+MDC.get("tranId")); } }
运行结果如下:
[105614.713][INFO ](aaa_1) aaa_1_null [LogThread.java:18 ]
[105614.713][INFO ](aaa_4) aaa_4_aaa_3 [LogThread.java:18 ]
[105614.713][INFO ](aaa_3) aaa_3_aaa_2 [LogThread.java:18 ]
[105614.713][INFO ](aaa_2) aaa_2_aaa_1 [LogThread.java:18 ]
[105614.713][INFO ](aaa_5) aaa_5_aaa_4 [LogThread.java:18 ]
能看出什么地方写错了吗?
相关推荐
Java8特性 [TOC] 1. Lambda 表达式 与传统匿名内部类写法的对比 无返回值 // 传统写法 new Thread(new Runnable() { @Override public void run() { System.out.println("worker thread is running"); } }).start();...
java8 源码 JAVA8实用范例 抛砖引玉!写出更简洁优美的代码 简介 自java5以来最大的版本变动 很大程度增强java类库 主要目标 更高的开发效率 更高代码可用性 更好的利用多核和多处理器系统 Lambda表达式 函数式接口:...
调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is HTTP Session tracking and why is it important? 45 191、What is session management, and how is ...
在Java5之后,并发线程这块发生了根本的变化,最重要的莫...在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
simple-fork-php 是基于 PCNTL 扩展的进程管理包,接口类似与 Java 的 Thread 和 Runnable 为什么要写 SimpleFork 多进程程序的编写相比较多线程编写更加复杂,需要考虑进程回收、同步、互斥、通信等问题。...
7 说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素...
189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is HTTP Session tracking and why is it important? 45 191、What is session management, and how is ...
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 40.接口是否可...