jstack(Java Stack Trace)簡(jiǎn)介

jstack(Java Stack Trace)簡(jiǎn)介

jstack:Java進(jìn)程中線程的堆棧信息跟蹤工具。
功能簡(jiǎn)介
??jstack常用來打印Java進(jìn)程/core文件/遠(yuǎn)程調(diào)試端口的Java線程堆棧跟蹤信息恭金,包含當(dāng)前虛擬機(jī)中所有線程正在執(zhí)行的方法堆棧信息的集合操禀。
??主要用來定位線程出現(xiàn)長時(shí)間停頓的原因,如線程間死鎖横腿、死循環(huán)颓屑、請(qǐng)求外部資源導(dǎo)致的長時(shí)間等待。
命令格式

jstack [ options ] pid                                      //Java進(jìn)程
jstack [ options ] executable core                          //core文件
jstack [ options ] [ server-id@ ] remote-hostname-or-IP     //遠(yuǎn)程調(diào)試端口

其中options選項(xiàng)可有

選項(xiàng) 作用
-F 當(dāng)正常輸出的請(qǐng)求不被響應(yīng)時(shí)蔑水,強(qiáng)制輸出線程堆棧
-l 除了堆棧外邢锯,顯示關(guān)于鎖的附加信息
-m 如果調(diào)用到本地方法的話,可以顯示C/C++的堆棧信息

其他說明

1搀别、When the specified process is running on a 64-bit Java Virtual Machine, you might need to specify the -J-d64 option, for example: jstack -J-d64 -m pid.
2丹擎、In mixed mode stack trace, the -m option does not work with the remote debug server.
3、In Windows Systems where the dbgeng.dll file is not present, Debugging Tools For Windows must be installed so these tools work.

輸出格式
jstack的輸出是該進(jìn)程下的所有線程的堆棧集合歇父,下面是一個(gè)線程的堆椀倥啵快照信息:

catalina-exec-72" daemon prio=5 tid=114 WAITING
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
       Local Variable: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node#294
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)
    at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
       Local Variable: java.util.concurrent.ThreadPoolExecutor$Worker#50
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
       Local Variable: org.apache.tomcat.util.threads.TaskThread$WrappingRunnable#38
    at java.lang.Thread.run(Thread.java:745)
屬性 說明
catalina-exec-72 線程名稱
prio 該線程JVM中的優(yōu)先級(jí)
os_prio 該線程在OS中的優(yōu)先級(jí)
tid JVM內(nèi)的thread id (Java-level thread ID)
daemon 表明這個(gè)線程是一個(gè)守護(hù)線程
nid Native thread ID,本地操作系統(tǒng)相關(guān)的線程id

nid說明
This ID is highly platform dependent. It's the nid in jstack thread dumps.
On Windows, it's simply the OS-level thread ID within a process.
On Linux, it's the pid of the thread (which in turn is a light-weight process).
On Solaris, it's the thread as returned by thr_self().
On Mac OS X, it is said to be the native pthread_t value.

狀?態(tài)
在jstack輸出的第二行為線程的狀態(tài)榜苫,在JVM中線程狀態(tài)使用枚舉 java.lang.Thread.State 來表示护戳,State的定義如下:

 public enum State {
        /**
         * Thread state for a thread which has not yet started.
         */
        NEW,

        /**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */
        RUNNABLE,

        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
        BLOCKED,

        /**
         * Thread state for a waiting thread.
         * A thread is in the waiting state due to calling one of the
         * following methods:
         * <ul>
         *   <li>{@link Object#wait() Object.wait} with no timeout</li>
         *   <li>{@link #join() Thread.join} with no timeout</li>
         *   <li>{@link LockSupport#park() LockSupport.park}</li>
         * </ul>
         *
         * <p>A thread in the waiting state is waiting for another thread to
         * perform a particular action.
         *
         * For example, a thread that has called <tt>Object.wait()</tt>
         * on an object is waiting for another thread to call
         * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
         * that object. A thread that has called <tt>Thread.join()</tt>
         * is waiting for a specified thread to terminate.
         */
        WAITING,

        /**
         * Thread state for a waiting thread with a specified waiting time.
         * A thread is in the timed waiting state due to calling one of
         * the following methods with a specified positive waiting time:
         * <ul>
         *   <li>{@link #sleep Thread.sleep}</li>
         *   <li>{@link Object#wait(long) Object.wait} with timeout</li>
         *   <li>{@link #join(long) Thread.join} with timeout</li>
         *   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
         *   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
         * </ul>
         */
        TIMED_WAITING,

        /**
         * Thread state for a terminated thread.
         * The thread has completed execution.
         */
        TERMINATED;
    }

線程圖


Thread_life.png
線程狀態(tài) 說明
NEW 當(dāng)線程對(duì)象創(chuàng)建時(shí)存在的狀態(tài),此時(shí)線程不可能執(zhí)行垂睬;
RUNNABLE 當(dāng)調(diào)用thread.start()后媳荒,線程變成為Runnable狀態(tài)。只要得到CPU驹饺,就可以執(zhí)行钳枕;
RUNNING 線程正在執(zhí)行;
WAITING 執(zhí)行thread.join()或在鎖對(duì)象調(diào)用obj.wait()等情況就會(huì)進(jìn)該狀態(tài)赏壹,表明線程正處于等待某個(gè)資源或條件發(fā)生來喚醒自己鱼炒;
TIMED_WAITING 執(zhí)行Thread.sleep(long)、thread.join(long)或obj.wait(long)等就會(huì)進(jìn)該狀態(tài)蝌借,與Waiting的區(qū)別在于Timed_Waiting的等待有時(shí)間限制昔瞧;
BLOCKED 如果進(jìn)入同步方法或同步代碼塊指蚁,沒有獲取到鎖,則會(huì)進(jìn)入該狀態(tài)自晰;
DEAD 線程執(zhí)行完畢凝化,或者拋出了未捕獲的異常之后,會(huì)進(jìn)入dead狀態(tài)酬荞,表示該線程結(jié)束缘圈。
jstack日志關(guān)鍵字 說 明
deadlock 死鎖
Waiting on condition 等待某個(gè)資源或條件發(fā)生來喚醒自己。具體需要結(jié)合jstacktrace來分析袜蚕,比如線程正在sleep糟把,網(wǎng)絡(luò)讀寫繁忙而等待
Blocked 阻塞
waiting on monitor entry 在等待獲取鎖
in Object.wait() 獲取鎖后又執(zhí)行obj.wait()放棄鎖

==如果說系統(tǒng)慢,那么要特別關(guān)注Blocked,Waiting on condition==
==如果說系統(tǒng)的cpu耗的高牲剃,那么肯定是線程執(zhí)行有死循環(huán)遣疯,那么此時(shí)要關(guān)注下Runable狀態(tài)。==

  • 死鎖
public class DeadLock {

    public static void main(String[] args) throws InterruptedException {
        Object obj1 = new Object();
        Object obj2 = new Object();
        Object obj3 = new Object();

        Thread t1 = new Thread(new SyncThread(obj1, obj2), "t1");
        Thread t2 = new Thread(new SyncThread(obj2, obj3), "t2");
        Thread t3 = new Thread(new SyncThread(obj3, obj1), "t3");

        t1.start();
        Thread.sleep(5000);
        t2.start();
        Thread.sleep(5000);
        t3.start();
    }

}

class SyncThread implements Runnable {
    private Object obj1;
    private Object obj2;

    public SyncThread(Object o1, Object o2) {
        this.obj1 = o1;
        this.obj2 = o2;
    }

    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        System.out.println(name + " acquiring lock on " + obj1);
        synchronized (obj1) {
            System.out.println(name + " acquired lock on " + obj1);
            work();
            System.out.println(name + " acquiring lock on " + obj2);
            synchronized (obj2) {
                System.out.println(name + " acquired lock on " + obj2);
                work();
            }
            System.out.println(name + " released lock on " + obj2);
        }
        System.out.println(name + " released lock on " + obj1);
        System.out.println(name + " finished execution.");
    }

    private void work() {
        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Found one Java-level deadlock:
=============================
"t3":
  waiting to lock monitor 0x000000000d8fb0a8 (object 0x00000007d7cd4828, a java.lang.Object),
  which is held by "t1"
"t1":
  waiting to lock monitor 0x000000000560c918 (object 0x00000007d7cd4fa0, a java.lang.Object),
  which is held by "t2"
"t2":
  waiting to lock monitor 0x000000000560de68 (object 0x00000007d7cd4818, a java.lang.Object),
  which is held by "t3"

Java stack information for the threads listed above:
===================================================
"t3":
        at com.tzx.test.SyncThread.run(DeadLock.java:41)
        - waiting to lock <0x00000007d7cd4828> (a java.lang.Object)
        - locked <0x00000007d7cd4818> (a java.lang.Object)
        at java.lang.Thread.run(Thread.java:744)
"t1":
        at com.tzx.test.SyncThread.run(DeadLock.java:41)
        - waiting to lock <0x00000007d7cd4fa0> (a java.lang.Object)
        - locked <0x00000007d7cd4828> (a java.lang.Object)
        at java.lang.Thread.run(Thread.java:744)
"t2":
        at com.tzx.test.SyncThread.run(DeadLock.java:41)
        - waiting to lock <0x00000007d7cd4818> (a java.lang.Object)
        - locked <0x00000007d7cd4fa0> (a java.lang.Object)
        at java.lang.Thread.run(Thread.java:744)
  • block范例
public class Blocked {

    public static void main(String[] args) {
        final Thread thread = new Thread() {
            @Override
            public void run() {
                synchronized (this) {
                    System.out.println(Thread.currentThread().getName());
                    try {
                        TimeUnit.SECONDS.sleep(60);
                    } catch (Exception e) {

                    }
                }
            }
        };
        thread.start();
        thread.setName("thread1");

        synchronized (thread) {
            System.out.println(Thread.currentThread().getName());
            try {
                TimeUnit.SECONDS.sleep(60);
            } catch (Exception e) {

            }
        }
    }
}
2017-11-24 18:39:59
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode):
"RMI TCP Connection(2)-172.18.95.100" daemon prio=6 tid=0x000000000f958000 nid=0x2598 runnable [0x00000000109ce000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:152)
        at java.net.SocketInputStream.read(SocketInputStream.java:122)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
        - locked <0x00000007d6695110> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:83)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:538)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)

   Locked ownable synchronizers:
        - <0x00000007d62075b0> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"JMX server connection timeout 14" daemon prio=6 tid=0x000000000fbe4000 nid=0x32f8 in Object.wait() [0x00000000105cf000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000007d62dbc78> (a [I)
        at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168)
        - locked <0x00000007d62dbc78> (a [I)
        at java.lang.Thread.run(Thread.java:744)
   Locked ownable synchronizers:
        - None
"RMI Scheduler(0)" daemon prio=6 tid=0x000000000fbe3000 nid=0xcc0 waiting on condition [0x00000000104cf000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000007d61806c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
   Locked ownable synchronizers:
        - None
"RMI TCP Connection(1)-172.18.95.100" daemon prio=6 tid=0x000000000fbe9000 nid=0x3b9c runnable [0x00000000103ce000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:152)
        at java.net.SocketInputStream.read(SocketInputStream.java:122)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
        - locked <0x00000007d62a64d0> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:83)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:538)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)

   Locked ownable synchronizers:
        - <0x00000007d6203998> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"RMI TCP Accept-0" daemon prio=6 tid=0x000000000fbe6000 nid=0x38c0 runnable [0x00000000101be000]
   java.lang.Thread.State: RUNNABLE
        at java.net.DualStackPlainSocketImpl.accept0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)
        at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:198)
        - locked <0x00000007d6181e30> (a java.net.SocksSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:530)
        at java.net.ServerSocket.accept(ServerSocket.java:498)
        at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:388)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:360)
        at java.lang.Thread.run(Thread.java:744)

   Locked ownable synchronizers:
        - None
"thread1" prio=6 tid=0x000000000f339000 nid=0x2728 waiting for monitor entry [0x000000000f89f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at com.tzx.test.Blocked$1.run(Blocked.java:12)
        - waiting to lock <0x00000007d5d2a758> (a com.tzx.test.Blocked$1)

   Locked ownable synchronizers:
        - None
"Service Thread" daemon prio=6 tid=0x000000000da67000 nid=0x2de4 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None
"C2 CompilerThread1" daemon prio=10 tid=0x000000000da63800 nid=0x2ccc waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None
"C2 CompilerThread0" daemon prio=10 tid=0x000000000da54800 nid=0x1aec waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None
"Attach Listener" daemon prio=10 tid=0x000000000da54000 nid=0x39fc waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None
"Signal Dispatcher" daemon prio=10 tid=0x00000000056de800 nid=0x3bac runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None
"Finalizer" daemon prio=8 tid=0x00000000056ce000 nid=0x778 in Object.wait() [0x000000000ed9f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000007d5c05568> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
        - locked <0x00000007d5c05568> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189)

   Locked ownable synchronizers:
        - None
"Reference Handler" daemon prio=10 tid=0x000000000da14000 nid=0x1254 in Object.wait() [0x000000000ec9f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000007d5c050f0> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:503)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
        - locked <0x00000007d5c050f0> (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
        - None
"main" prio=6 tid=0x00000000055e6000 nid=0x2da8 waiting on condition [0x000000000558f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at java.lang.Thread.sleep(Thread.java:340)
        at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:360)
        at com.tzx.test.Blocked.main(Blocked.java:27)
        - locked <0x00000007d5d2a758> (a com.tzx.test.Blocked$1)

   Locked ownable synchronizers:
        - None
"VM Thread" prio=10 tid=0x000000000da12000 nid=0x3434 runnable
"GC task thread#0 (ParallelGC)" prio=6 tid=0x00000000055fc000 nid=0x2da4 runnable
"GC task thread#1 (ParallelGC)" prio=6 tid=0x00000000055fe000 nid=0x10fc runnable
"GC task thread#2 (ParallelGC)" prio=6 tid=0x00000000055ff800 nid=0x32b0 runnable
"GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000005602800 nid=0x534 runnable
"VM Periodic Task Thread" prio=10 tid=0x000000000f2b0800 nid=0x2f78 waiting on condition
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凿傅,一起剝皮案震驚了整個(gè)濱河市缠犀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聪舒,老刑警劉巖辨液,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異箱残,居然都是意外死亡滔迈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門被辑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燎悍,“玉大人,你說我怎么就攤上這事盼理√干剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵宏怔,是天一觀的道長奏路。 經(jīng)常有香客問我,道長臊诊,這世上最難降的妖魔是什么鸽粉? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮妨猩,結(jié)果婚禮上潜叛,老公的妹妹穿的比我還像新娘秽褒。我一直安慰自己壶硅,他們只是感情好威兜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庐椒,像睡著了一般椒舵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上约谈,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天笔宿,我揣著相機(jī)與錄音,去河邊找鬼棱诱。 笑死泼橘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迈勋。 我是一名探鬼主播炬灭,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼靡菇!你這毒婦竟也來了重归?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤厦凤,失蹤者是張志新(化名)和其女友劉穎鼻吮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體较鼓,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椎木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了博烂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拓哺。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脖母,靈堂內(nèi)的尸體忽然破棺而出士鸥,到底是詐尸還是另有隱情,我是刑警寧澤谆级,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布烤礁,位于F島的核電站,受9級(jí)特大地震影響肥照,放射性物質(zhì)發(fā)生泄漏脚仔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一舆绎、第九天 我趴在偏房一處隱蔽的房頂上張望鲤脏。 院中可真熱鬧,春花似錦、人聲如沸猎醇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硫嘶。三九已至阻问,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沦疾,已是汗流浹背称近。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哮塞,地道東北人刨秆。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像忆畅,于是被迫代替她去往敵國和親坛善。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法邻眷,類相關(guān)的語法眠屎,內(nèi)部類的語法,繼承相關(guān)的語法肆饶,異常的語法改衩,線程的語...
    子非魚_t_閱讀 31,623評(píng)論 18 399
  • 對(duì)一個(gè)人最大的懲罰,是無視驯镊,重置于原位葫督。
    繭憶閱讀 212評(píng)論 0 0
  • 那些一心想著減肥,遇到美食就半途而廢的人;那些制定了學(xué)習(xí)計(jì)劃板惑,卻「中道崩殂」的人;那些想著要跑步健身橄镜,卻三天打魚兩...
    小童是你吖閱讀 183評(píng)論 1 4
  • 一個(gè)令人感覺有安全感的溝通者洽胶,通常有三個(gè)特點(diǎn):①別人和你談話后,不會(huì)更焦慮裆馒;②無論談到什么姊氓,不擔(dān)心你會(huì)嘲笑或者批判...
    繁花塢閱讀 581評(píng)論 6 15
  • 這段生活的開始呢 是一場(chǎng)聚會(huì)的結(jié)束 從熟悉到陌生的人,從陌生到熟悉的人喷好。未改變的是身邊一直有一個(gè)她翔横。 6月26日來...
    柚子沒有蜂蜜閱讀 332評(píng)論 0 0