栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否有可能使线程自身死锁?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否有可能使线程自身死锁?

JVM仅跟踪具有监视器的本地线程,如果调用类对其自身进行外部调用,则传入调用将导致原始线程自身死锁。

您应该能够运行此代码来说明这个想法

import java.rmi.*;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;import java.rmi.server.*;public class DeadlockThreadExample {    public static interface DeadlockClass extends Remote {        public void execute() throws RemoteException;    }    public static class DeadlockClassImpl extends UnicastRemoteObject implements DeadlockClass {        private Object lock = new Object();        public DeadlockClassImpl() throws RemoteException { super();        }        public void execute() throws RemoteException { try {     System.out.println("execute()::start");     synchronized (lock) {         System.out.println("execute()::Entered Lock");         DeadlockClass deadlockClass = (DeadlockClass) Naming.lookup("rmi://localhost/DeadlockClass");         deadlockClass.execute();     }     System.out.println("execute()::Exited Lock"); } catch (NotBoundException e) {     System.out.println(e.getMessage()); } catch (java.net.MalformedURLException e) {     System.out.println(e.getMessage()); } System.out.println("execute()::end");        }    }    public static void main(String[] args) throws Exception {        LocateRegistry.createRegistry(Registry.REGISTRY_PORT);        DeadlockClassImpl deadlockClassImpl = new DeadlockClassImpl();        Naming.rebind("DeadlockClass", deadlockClassImpl);        DeadlockClass deadlockClass = (DeadlockClass) Naming.lookup("rmi://localhost/DeadlockClass");        deadlockClass.execute();        System.exit(0);    }}

程序的输出看起来像

execute()::startexecute()::Entered Lockexecute()::start

此外,该线程还转储显示以下内容

"main" prio=6 tid=0x00037fb8 nid=0xb80 runnable [0x0007f000..0x0007fc3c]    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(SocketInputStream.java:129)    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)    at java.io.BufferedInputStream.read(BufferedInputStream.java:235)    - locked <0x02fdc568> (a java.io.BufferedInputStream)    at java.io.DataInputStream.readByte(DataInputStream.java:241)"RMI TCP Connection(4)-172.17.23.165" daemon prio=6 tid=0x0ad83d30 nid=0x1590 waiting for monitor entry [0x0b3cf000..0x0b3cfce8]    at DeadlockThreadExample$DeadlockClassImpl.execute(DeadlockThreadExample.java:24)    - waiting to lock <0x0300a848> (a java.lang.Object)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"RMI TCP Connection(2)-172.17.23.165" daemon prio=6 tid=0x0ad74008 nid=0x15f0 runnable [0x0b24f000..0x0b24fbe8]     at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(SocketInputStream.java:129)    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)    at java.io.BufferedInputStream.read(BufferedInputStream.java:235)    - locked <0x02ffb6d8> (a java.io.BufferedInputStream)    at java.io.DataInputStream.readByte(DataInputStream.java:241)

这表明线程确实已经成功锁定了自己



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号