首页 \ 问答 \ 如何找出谁在java中创建线程?(how to find out who create a thread in java?)

如何找出谁在java中创建线程?(how to find out who create a thread in java?)

在tomcat中,如果webapp确实停止了一个无守护线程,那么tomcat不能通过shutdown.sh关闭

例如:

public class demo implements ServletContextListener{

  public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    // yes,we can cancel timer in here,but this is not the major problem
   }

  public void contextInitialized(ServletContextEvent arg0) {        
    Timer timer = new Timer();
    timer.schedule(new Test(), 1000, 1000*10);
    }
}

public class Test extends TimerTask{  
@Override
public void run() {
    System.out.println("AAAA");        
   }
}

像上面那样,tomcat不能被shutdown.sh关闭。 从jvisualvm,线程检查员说:

"Timer-0" - Thread t@40
   java.lang.Thread.State: TIMED_WAITING
    at java.lang.Object.wait(Native Method)
    - waiting on <3957edeb> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:552)
    at java.util.TimerThread.run(Timer.java:505)

   Locked ownable synchronizers:
    - None

堆栈信息没有指出哪个java类创建了线程,我的问题是如何找出谁是从很多webapps创建线程的。

谢谢!


in tomcat,if a webapp did stop a none daemon thread,tomcat can not be shutdown by shutdown.sh

for example:

public class demo implements ServletContextListener{

  public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    // yes,we can cancel timer in here,but this is not the major problem
   }

  public void contextInitialized(ServletContextEvent arg0) {        
    Timer timer = new Timer();
    timer.schedule(new Test(), 1000, 1000*10);
    }
}

public class Test extends TimerTask{  
@Override
public void run() {
    System.out.println("AAAA");        
   }
}

like as above,tomcat can not be shutdown by shutdown.sh. from jvisualvm,threads inspector say:

"Timer-0" - Thread t@40
   java.lang.Thread.State: TIMED_WAITING
    at java.lang.Object.wait(Native Method)
    - waiting on <3957edeb> (a java.util.TaskQueue)
    at java.util.TimerThread.mainLoop(Timer.java:552)
    at java.util.TimerThread.run(Timer.java:505)

   Locked ownable synchronizers:
    - None

stack info did not point out which java class created the thread, my question is how to find out who created the thread from many webapps.

Thanks!


原文:https://stackoverflow.com/questions/18999444
更新时间:2023-11-18 09:11

最满意答案

您可以将itertools与标准运算符一起使用:

>>> import itertools, operator
>>> running_sum = itertools.accumulate(data)
>>> running_mean = map(operator.truediv, running_sum, itertools.count(1))

例:

>>> data = (np.linspace(-i, i*i, 6) for i in range(10))
>>> 
>>> running_sum = itertools.accumulate(data)
>>> running_mean = map(operator.truediv, running_sum, itertools.count(1))
>>> 
>>> for i in running_mean:
...     print(i)
... 
[0. 0. 0. 0. 0. 0.]
[-0.5 -0.3 -0.1  0.1  0.3  0.5]
[-1.         -0.46666667  0.06666667  0.6         1.13333333  1.66666667]
[-1.5 -0.5  0.5  1.5  2.5  3.5]
[-2.  -0.4  1.2  2.8  4.4  6. ]
[-2.5        -0.16666667  2.16666667  4.5         6.83333333  9.16666667]
[-3.   0.2  3.4  6.6  9.8 13. ]
[-3.5  0.7  4.9  9.1 13.3 17.5]
[-4.          1.33333333  6.66666667 12.         17.33333333 22.66666667]
[-4.5  2.1  8.7 15.3 21.9 28.5]

You can use itertools together with standard operators:

>>> import itertools, operator
>>> running_sum = itertools.accumulate(data)
>>> running_mean = map(operator.truediv, running_sum, itertools.count(1))

Example:

>>> data = (np.linspace(-i, i*i, 6) for i in range(10))
>>> 
>>> running_sum = itertools.accumulate(data)
>>> running_mean = map(operator.truediv, running_sum, itertools.count(1))
>>> 
>>> for i in running_mean:
...     print(i)
... 
[0. 0. 0. 0. 0. 0.]
[-0.5 -0.3 -0.1  0.1  0.3  0.5]
[-1.         -0.46666667  0.06666667  0.6         1.13333333  1.66666667]
[-1.5 -0.5  0.5  1.5  2.5  3.5]
[-2.  -0.4  1.2  2.8  4.4  6. ]
[-2.5        -0.16666667  2.16666667  4.5         6.83333333  9.16666667]
[-3.   0.2  3.4  6.6  9.8 13. ]
[-3.5  0.7  4.9  9.1 13.3 17.5]
[-4.          1.33333333  6.66666667 12.         17.33333333 22.66666667]
[-4.5  2.1  8.7 15.3 21.9 28.5]

相关问答

更多

相关文章

更多

最新问答

更多
  • h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
  • 创建一个功能(Create a function)
  • 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
  • PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
  • Qt冻结循环的原因?(Qt freezing cause of the loop?)
  • TableView重复youtube-api结果(TableView Repeating youtube-api result)
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
  • 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
  • 以编程方式创建UITableView(Creating a UITableView Programmatically)
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
  • Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
  • 设置kotlin扩展名(Setting a kotlin extension)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 如何在vim中启用python3?(How to enable python3 in vim?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • dedecms如何安装?
  • 在哪儿学计算机最好?
  • 学php哪个的书 最好,本人菜鸟
  • 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
  • 如何覆盖错误堆栈getter(How to override Error stack getter)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
  • 电脑高中毕业学习去哪里培训
  • 正则表达式验证SMTP响应(Regex to validate SMTP Responses)