正如logback的文档所说,大多数appender本质上是同步的,但是如果我们将appender包装在异步appender中,那么线程将把数据推送到BlockingQueue中,如果有,比如说X-logback线程将从BlockingQueue获取数据并将其追加。这就是我对它的基本理解。
尝试使用JstackThread转储来测试这个。但是空手返回,没有回退线程的线索。
作为参考,请检查下面logback.xml和线程转储的方案。
具有异步的FileAppender。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug = "true">
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myapp.log</file>
<encoder>
<pattern>%logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<root level="DEBUG">
<appender-ref ref="ASYNC" />
</root>
</configuration>
线程转储
2022-05-01 20:24:28
Full thread dump OpenJDK 64-Bit Server VM (11.0.11+9-b1504.13 mixed mode):
Threads class SMR info:
_java_thread_list=0x0000600000a6bc40, length=11, elements={
0x000000013101c800, 0x000000013101a800, 0x000000013300a800, 0x0000000132077000,
0x0000000131874800, 0x0000000131852800, 0x0000000131853000, 0x0000000131025000,
0x00000001320e2800, 0x0000000125043800, 0x000000013218d000
}
"Reference Handler" #2 daemon prio=10 os_prio=31 cpu=0.51ms elapsed=386.08s tid=0x000000013101c800 nid=0x4303 waiting on condition [0x000000016ebbe000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.11/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@11.0.11/Reference.java:241)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.11/Reference.java:213)
Locked ownable synchronizers:
- None
"Finalizer" #3 daemon prio=8 os_prio=31 cpu=0.41ms elapsed=386.08s tid=0x000000013101a800 nid=0x3303 in Object.wait() [0x000000016edca000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base@11.0.11/Native Method)
- waiting on <0x000000079af0d550> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
- waiting to re-lock in wait() <0x000000079af0d550> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:176)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.11/Finalizer.java:170)
Locked ownable synchronizers:
- None
"Signal Dispatcher" #4 daemon prio=9 os_prio=31 cpu=1.67ms elapsed=386.07s tid=0x000000013300a800 nid=0x3d03 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Service Thread" #5 daemon prio=9 os_prio=31 cpu=0.02ms elapsed=386.07s tid=0x0000000132077000 nid=0x5603 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"C2 CompilerThread0" #6 daemon prio=9 os_prio=31 cpu=337.48ms elapsed=386.07s tid=0x0000000131874800 nid=0x5703 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
Locked ownable synchronizers:
- None
"C1 CompilerThread0" #9 daemon prio=9 os_prio=31 cpu=266.34ms elapsed=386.07s tid=0x0000000131852800 nid=0xa603 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
Locked ownable synchronizers:
- None
"Sweeper thread" #10 daemon prio=9 os_prio=31 cpu=0.05ms elapsed=386.07s tid=0x0000000131853000 nid=0x5b03 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Common-Cleaner" #11 daemon prio=8 os_prio=31 cpu=2.86ms elapsed=386.05s tid=0x0000000131025000 nid=0xa303 in Object.wait() [0x000000016fd36000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base@11.0.11/Native Method)
- waiting on <0x000000079af0dfe8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
- waiting to re-lock in wait() <0x000000079af0dfe8> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base@11.0.11/CleanerImpl.java:148)
at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
at jdk.internal.misc.InnocuousThread.run(java.base@11.0.11/InnocuousThread.java:134)
Locked ownable synchronizers:
- None
"JPS event loop" #12 prio=5 os_prio=31 cpu=33.87ms elapsed=385.71s tid=0x00000001320e2800 nid=0xa003 runnable [0x000000016ff42000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.KQueue.poll(java.base@11.0.11/Native Method)
at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@11.0.11/KQueueSelectorImpl.java:122)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@11.0.11/SelectorImpl.java:124)
- locked <0x000000079af0e4c8> (a sun.nio.ch.Util$2)
- locked <0x000000079af0e468> (a sun.nio.ch.KQueueSelectorImpl)
at sun.nio.ch.SelectorImpl.select(java.base@11.0.11/SelectorImpl.java:141)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:810)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
Locked ownable synchronizers:
- None
"DestroyJavaVM" #14 prio=5 os_prio=31 cpu=583.44ms elapsed=385.33s tid=0x0000000125043800 nid=0x1903 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Attach Listener" #16 daemon prio=9 os_prio=31 cpu=2.01ms elapsed=295.61s tid=0x000000013218d000 nid=0x9507 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"VM Thread" os_prio=31 cpu=39.84ms elapsed=386.09s tid=0x0000000131016000 nid=0x3003 runnable
"GC Thread#0" os_prio=31 cpu=6.72ms elapsed=386.10s tid=0x0000000133014800 nid=0x2d03 runnable
"GC Thread#1" os_prio=31 cpu=6.27ms elapsed=385.62s tid=0x000000013188d800 nid=0x9e03 runnable
"GC Thread#2" os_prio=31 cpu=5.06ms elapsed=385.62s tid=0x000000013187f800 nid=0x9c03 runnable
"GC Thread#3" os_prio=31 cpu=5.78ms elapsed=385.62s tid=0x0000000131a79800 nid=0x9a03 runnable
"G1 Main Marker" os_prio=31 cpu=0.25ms elapsed=386.10s tid=0x0000000132018000 nid=0x5003 runnable
"G1 Conc#0" os_prio=31 cpu=2.57ms elapsed=386.10s tid=0x0000000133015000 nid=0x4c03 runnable
"G1 Conc#1" os_prio=31 cpu=2.47ms elapsed=385.47s tid=0x0000000131ae8800 nid=0x9403 runnable
"G1 Refine#0" os_prio=31 cpu=1.64ms elapsed=386.10s tid=0x0000000131819800 nid=0x4a03 runnable
"G1 Refine#1" os_prio=31 cpu=0.53ms elapsed=385.62s tid=0x000000013311f800 nid=0x9803 runnable
"G1 Young RemSet Sampling" os_prio=31 cpu=50.84ms elapsed=386.10s tid=0x000000013181a000 nid=0x4903 runnable
"VM Periodic Task Thread" os_prio=31 cpu=198.90ms elapsed=386.05s tid=0x000000012580a800 nid=0x5c03 waiting on condition
JNI global refs: 14, weak refs: 0
对于ConsoleAppender也没有ASYNC。
2022-04-28 11:59:20
Full thread dump OpenJDK 64-Bit Server VM (11.0.11+9-b1504.13 mixed mode):
Threads class SMR info:
_java_thread_list=0x00006000018d3740, length=11, elements={
0x000000014b08c800, 0x000000014b089000, 0x000000014904b800, 0x000000014b099000,
0x000000014b09e000, 0x000000014b09f000, 0x0000000149031800, 0x0000000149828000,
0x00000001498b8000, 0x0000000149172800, 0x000000014b1ba000
}
"Reference Handler" #2 daemon prio=10 os_prio=31 cpu=0.55ms elapsed=282.20s tid=0x000000014b08c800 nid=0x4b03 waiting on condition [0x00000001702d2000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.11/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@11.0.11/Reference.java:241)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.11/Reference.java:213)
"Finalizer" #3 daemon prio=8 os_prio=31 cpu=0.33ms elapsed=282.20s tid=0x000000014b089000 nid=0x4803 in Object.wait() [0x00000001704de000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base@11.0.11/Native Method)
- waiting on <0x0000000794cedb80> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
- waiting to re-lock in wait() <0x0000000794cedb80> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:176)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.11/Finalizer.java:170)
"Signal Dispatcher" #4 daemon prio=9 os_prio=31 cpu=0.96ms elapsed=282.18s tid=0x000000014904b800 nid=0x4203 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Service Thread" #5 daemon prio=9 os_prio=31 cpu=0.01ms elapsed=282.18s tid=0x000000014b099000 nid=0x5603 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #6 daemon prio=9 os_prio=31 cpu=429.52ms elapsed=282.18s tid=0x000000014b09e000 nid=0x5903 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"C1 CompilerThread0" #9 daemon prio=9 os_prio=31 cpu=348.22ms elapsed=282.18s tid=0x000000014b09f000 nid=0x5b03 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"Sweeper thread" #10 daemon prio=9 os_prio=31 cpu=0.04ms elapsed=282.18s tid=0x0000000149031800 nid=0xa703 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Common-Cleaner" #11 daemon prio=8 os_prio=31 cpu=3.60ms elapsed=282.15s tid=0x0000000149828000 nid=0xa503 in Object.wait() [0x000000017144a000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base@11.0.11/Native Method)
- waiting on <0x0000000794cee618> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
- waiting to re-lock in wait() <0x0000000794cee618> (a java.lang.ref.ReferenceQueue$Lock)
at jdk.internal.ref.CleanerImpl.run(java.base@11.0.11/CleanerImpl.java:148)
at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
at jdk.internal.misc.InnocuousThread.run(java.base@11.0.11/InnocuousThread.java:134)
"JPS event loop" #12 prio=5 os_prio=31 cpu=40.32ms elapsed=281.67s tid=0x00000001498b8000 nid=0xa303 runnable [0x0000000171656000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.KQueue.poll(java.base@11.0.11/Native Method)
at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@11.0.11/KQueueSelectorImpl.java:122)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@11.0.11/SelectorImpl.java:124)
- locked <0x0000000794cee9e0> (a sun.nio.ch.Util$2)
- locked <0x0000000794cee980> (a sun.nio.ch.KQueueSelectorImpl)
at sun.nio.ch.SelectorImpl.select(java.base@11.0.11/SelectorImpl.java:141)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:810)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
"DestroyJavaVM" #14 prio=5 os_prio=31 cpu=823.18ms elapsed=280.75s tid=0x0000000149172800 nid=0x2703 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Attach Listener" #16 daemon prio=9 os_prio=31 cpu=1.41ms elapsed=7.34s tid=0x000000014b1ba000 nid=0x6407 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"VM Thread" os_prio=31 cpu=21.10ms elapsed=282.21s tid=0x000000014a00d000 nid=0x3803 runnable
"GC Thread#0" os_prio=31 cpu=7.63ms elapsed=282.23s tid=0x000000014b010000 nid=0x2e03 runnable
"GC Thread#1" os_prio=31 cpu=10.22ms elapsed=281.44s tid=0x00000001499e5000 nid=0xa203 runnable
"GC Thread#2" os_prio=31 cpu=8.88ms elapsed=281.44s tid=0x000000014a126000 nid=0xa003 runnable
"GC Thread#3" os_prio=31 cpu=9.58ms elapsed=281.44s tid=0x000000014b16e800 nid=0x6303 runnable
"G1 Main Marker" os_prio=31 cpu=0.39ms elapsed=282.23s tid=0x000000014b01d000 nid=0x2f03 runnable
"G1 Conc#0" os_prio=31 cpu=3.13ms elapsed=282.23s tid=0x000000014900c000 nid=0x3203 runnable
"G1 Conc#1" os_prio=31 cpu=3.24ms elapsed=280.98s tid=0x0000000149a00800 nid=0x6503 runnable
"G1 Refine#0" os_prio=31 cpu=1.22ms elapsed=282.23s tid=0x0000000149022000 nid=0x3403 runnable
"G1 Young RemSet Sampling" os_prio=31 cpu=33.96ms elapsed=282.23s tid=0x0000000149022800 nid=0x4f03 runnable
"VM Periodic Task Thread" os_prio=31 cpu=119.50ms elapsed=282.16s tid=0x000000012b008800 nid=0xa603 waiting on condition
JNI global refs: 14, weak refs: 0
谁能帮帮我,为什么JStack没有显示任何LOGBACK-THREAD在停车状态下等待。
在做了更多的研究后,我发现我为我的应用程序选择了错误的PID。在我使用ps-ef然后按应用程序名称搜索之前,这有点正确,但我不知道有两个实例正在运行,我选择了错误的一个。
多亏了baeldung,我使用了Jps命令,然后选择了应用程序的PID,并简单地
JStack PID
我们开始了。
下面的代码创建了一个新的custom um < code > Thread ,并等待线程结束,直到主线程再次激活。 > < li >我不太明白它是如何工作的。为什么< code > myth read . wait();立即接到电话? < li> 为什么不改用< code>Thread.join()? 公共静态void main(String[] args) {
所以我有一个代码: 所以我将线程添加到我的线程列表中,然后启动这些线程。这是MyThread类: 我想做一个程序来创建线程,将它们添加到列表中,调用它们,但是每个线程都应该等到前一个线程结束它的任务。因此输出应该如下所示: 如何使用实现这一点?我尝试了使用的不同方法,但失败了。
互斥锁 条件变量 POSIX信号量
问题内容: 我正在使用Android App,无法将View与硬件同步。让我解释。 1)我从线程1的run方法中基于数组A中存储的随机值(即随机睡眠)对Android的麦克风进行静音和取消静音。 2)我画出反映麦克风静音的蓝色脉冲。这是通过独立的View类完成的。 3)通过从倒数计时器的onTick内调用,我在上面视图中绘制的图形上移动了一条红线。 我以这种方式一个接一个地启动两个线程: 线程1.
主要内容:1 什么是Java 线程同步,2 为什么使用Java线程同步,3 Java同步类型,4 Java线程同步的类型,5 线程互斥,6 Java锁的概念,7 线程并发问题引发数据不一致,8 Java synchronized方法的例子1,9 Java synchronized方法的例子21 什么是Java 线程同步 Java中的同步是控制多个线程对任何共享资源的访问的能力。 Java同步是更好的选择,我们希望只允许一个线程访问共享资源。 2 为什么使用Java线程同步 Java线程同步主要用
我有3节课是这样的: 来源Java语言 任务Java语言 主要的Java语言 当类源的x等于4时,只有一个任务继续递增x,直到x等于8,我们恢复正常。结果如下: 要获得此结果,我需要修复什么?