优雅地使用Java Thread.suspend()

时间:2016-01-28 21:08:30

标签: java multithreading thread-safety

编辑:更新了问题以准确解释我需要的内容。

所以我使用

将javaagent附加到进程
VirtualMachine vm = VirtualMachine.attach(processPid);
vm.loadAgent(jarPath);

现在我的代理程序在一个单独的线程上运行。现在我需要做的是在加载任何类之前加载所有变换器。附加进程中有一个线程加载所有类。我希望能够在正确的时间暂停此线程(不会导致死锁)等待我的所有初始化(包括下载)然后注册我的变换器。重要的是变换器在主类加载之前注册,所以我可以修改我想要的类。

我目前正在通过它的名字获取该帖子,并在其上调用suspend()。但这会导致死锁。我有什么方法可以让那个帖子等我吗?

我尝试的事情:

  1. 立即转换主要类以添加Thread.sleep(),因为我的代理人在主要课程之后加载
  2. 而无法正常工作
  3. 使用导致死锁的Thread.suspend

1 个答案:

答案 0 :(得分:0)

"我无法控制的线程"意思?如果您的代码调用t.suspend(),那么 是一种控件。您是否试图告诉我们该线程执行的代码您无法获取源代码?

什么"优雅地暂停"意思?如果您的程序名为t.suspend(),您的程序是否可以决定是否已将该帖子暂停在" good"时间?

你说你希望在程序执行其他操作时挂起该线程。你能否更详细地解释一下线程的作用,以及你希望程序在线程被挂起时做什么,以及为什么你不能同时允许这两件事发生?

如果你的程序可以分辨好时间和坏时间之间的区别,并且它选择了一个糟糕的时间,那么程序是否有意义恢复该线程然后再试一次?