如何找出谁在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
最满意答案
您可以将
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]
相关问答
更多-
在python中创建许多ndarray(不同大小)的列表(Creating a list of many ndarrays (different size) in python)[2022-03-11]
你可以使用字典: layer_dict = {} for X in range(1,16): layer_dict['layer_' + str(X)] = np.ndarray(shape=(1, 1, 32, 64)) 这允许存储各种大小的数组(以及任何其他精确的数据类型),添加和删除组件。 它还允许您有效地访问阵列。 要添加图层类型: layer_dict['layer_16'] = np.ndarray(shape=(1, 1, 512, 1024)) 要删除一个: del layer_ ... -
所以每个“行”(我假设第一个轴,我将调用轴0)是样本轴。 这意味着您从一个矢量中获取100个样本,每个样本的字段x维数为4 x 200。 按照您描述的方式进行操作,那么第一个数组的第一行将会有(4,200),第二行将会有(150,6,200)。 然后你想要在(m,n)和(m,n,k)数组之间做一个cos距离,这是没有意义的(这里最接近点积的就是张量积,我相当确定是不是你想要的)。 所以我们必须首先提取这些,然后遍历所有其他的。 要做到这一点,我实际上只是建议将数组与np.split然后遍历它们。 这仅仅是因 ...
-
关于HEALPIX像素化的最佳信息来源是Healpix底漆: http://healpix.jpl.nasa.gov/html/intro.htm 地图是一维向量,每个索引是天空中的一个像素。 你可以使用hp.pix2ang将像素数转换为天空中的hp.pix2ang 。 将其整形为1024行只是一种快速读写/写入磁盘的技巧。 the best source of information about the HEALPIX pixelization is the Healpix primer: http:// ...
-
如何在ndarrays列表中找到唯一元素的数量?(How to find the number of unique elements in a list of ndarrays?)[2023-12-31]
您可以将数组转换为元组: len(set([tuple(v) for v in l])) You can cast the arrays to tuples: len(set([tuple(v) for v in l])) -
将示例转换为数组的最简单方法是将其复制粘贴为多行字符串,并使用genfromtxt进行解析: In [344]: txt=b'''"abc" 1.000 "abc" ...: "fsfds" -5.000 "qw" ...: "svs" 2.094 "svs" ...: "dfdsge" 3.348 "dd" ''' In [346]: np.genfromtxt(txt.split ...
-
您可以将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 ...
-
首先,每个是2x2。 组合在列表中的array ,与制作red相同的结构,产生3x2x2。 In [344]: red = np.array([[150,25],[37,214]]) In [345]: green = np.array([[190,27],[123,231]]) In [346]: blue = np.array([[10,112],[123,119]]) In [347]: np.array([red,green,blue]) Out[347]: array([[[150, 25], ...
-
我对你想要的东西做了很多猜测,但这里是创建一个数组元组的示例: 一个'图像',平移到(784,)形状: In [1027]: img=np.ones((28,28),int) In [1028]: imgr = img.ravel() In [1029]: imgr.shape Out[1029]: (784,) '堆叠'这个图像的一堆副本。 np.concatenate对于连接数组也很方便,但是np.array自动将它们连接到新轴上。 In [1030]: imgs=np.array([imgr.cop ...
-
Numpy有一个最小功能,如下所示: c = np.minimum(a,b) Numpy has a minimum feature, as below: c = np.minimum(a,b)
-
不,如果每列的n不同,则无法创建n*4 2d array : >>> np.vstack((np.arange(10),np.arange(1,11),np.arange(2,12))) array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]) >>> np.vstack( ...