想监视他们的状态,是卡的,还是死了,怎么死的,死在哪?
怎么线程堆栈如何查看?
谢谢哦
11 个解决方案
#1
线程池的地方在新增或者删除线程的时候加一个debug信息。如果在命令行下面启动的话用ctrl + break就可以看到当前哪些线程在运行了。。。
#2
另外,线程命名最好能有一个规范,看线程堆栈的时候就会比较清晰。。
#3
感谢您的热心解答。请问怎么增加debug信息。
还是怎样
#4
学习了...
#5
线程池的地方在新增或者删除线程的时候加一个debug信息。
如果在命令行下面启动的话用ctrl + break就可以看到当前哪些线程在运行了。。。
如果在命令行下面启动的话用ctrl + break就可以看到当前哪些线程在运行了。。。
#6
呵呵,增加debug信息想怎么增就怎么增撒,System.out.println("添加线程了")或者logger.info("添加线程了")都可以嘛,看你自己。。找到线程池新增线程的地方把这个加进去就是了。。
#7
这位兄台拷贝技术不错嘛。。
#8
运行Callable任务可拿到一个Future对象,
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
#9
callable接口(就比runnable接口的方法多了返回值)
public interface Callable<v>{
v call() throw Exception;
}
Future接口(封装了线程的计算结果)
public interface Future<v>{
v get();
v get(long timeout,TimeUnit unit);
void cancel(boolean mayInterruot);
boolean isDone();
}
FutureTask包装器可以把callable转换成Future和Runnable的机制 他实现了这两个接口
Callable<Integer> myResult=。。。;
FutureTask<Integer> task=new FutureTask<Integer>(myResult);
Thread t = new Thread(task);//实现了Runnable接口
t.start();
...
Integer result = task.get();//实现了Future接口
public interface Callable<v>{
v call() throw Exception;
}
Future接口(封装了线程的计算结果)
public interface Future<v>{
v get();
v get(long timeout,TimeUnit unit);
void cancel(boolean mayInterruot);
boolean isDone();
}
FutureTask包装器可以把callable转换成Future和Runnable的机制 他实现了这两个接口
Callable<Integer> myResult=。。。;
FutureTask<Integer> task=new FutureTask<Integer>(myResult);
Thread t = new Thread(task);//实现了Runnable接口
t.start();
...
Integer result = task.get();//实现了Future接口
#10
可以讲下用这个接口侦听线程的具体使用方法吗?
#11
Thread bt = null;
str.append("Trace info:\r\n");
for (int i = 0; i < runThreads.size(); i++) {
bt = runThreads.get(i);
str.append(bt);
str.append(" state:");
str.append(bt.getState().toString());
str.append("\r\n");
try{
StackTraceElement[] ste = bt.getStackTrace();
for (int j = 0; j < ste.length; j++) {
str.append(ste[j]);
str.append("\r\n");
}
}
catch(Exception e){
str.append("trace fail ...");
}
}
str.append("Trace info:\r\n");
for (int i = 0; i < runThreads.size(); i++) {
bt = runThreads.get(i);
str.append(bt);
str.append(" state:");
str.append(bt.getState().toString());
str.append("\r\n");
try{
StackTraceElement[] ste = bt.getStackTrace();
for (int j = 0; j < ste.length; j++) {
str.append(ste[j]);
str.append("\r\n");
}
}
catch(Exception e){
str.append("trace fail ...");
}
}
#1
线程池的地方在新增或者删除线程的时候加一个debug信息。如果在命令行下面启动的话用ctrl + break就可以看到当前哪些线程在运行了。。。
#2
另外,线程命名最好能有一个规范,看线程堆栈的时候就会比较清晰。。
#3
感谢您的热心解答。请问怎么增加debug信息。
还是怎样
#4
学习了...
#5
线程池的地方在新增或者删除线程的时候加一个debug信息。
如果在命令行下面启动的话用ctrl + break就可以看到当前哪些线程在运行了。。。
如果在命令行下面启动的话用ctrl + break就可以看到当前哪些线程在运行了。。。
#6
呵呵,增加debug信息想怎么增就怎么增撒,System.out.println("添加线程了")或者logger.info("添加线程了")都可以嘛,看你自己。。找到线程池新增线程的地方把这个加进去就是了。。
#7
这位兄台拷贝技术不错嘛。。
#8
运行Callable任务可拿到一个Future对象,
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
#9
callable接口(就比runnable接口的方法多了返回值)
public interface Callable<v>{
v call() throw Exception;
}
Future接口(封装了线程的计算结果)
public interface Future<v>{
v get();
v get(long timeout,TimeUnit unit);
void cancel(boolean mayInterruot);
boolean isDone();
}
FutureTask包装器可以把callable转换成Future和Runnable的机制 他实现了这两个接口
Callable<Integer> myResult=。。。;
FutureTask<Integer> task=new FutureTask<Integer>(myResult);
Thread t = new Thread(task);//实现了Runnable接口
t.start();
...
Integer result = task.get();//实现了Future接口
public interface Callable<v>{
v call() throw Exception;
}
Future接口(封装了线程的计算结果)
public interface Future<v>{
v get();
v get(long timeout,TimeUnit unit);
void cancel(boolean mayInterruot);
boolean isDone();
}
FutureTask包装器可以把callable转换成Future和Runnable的机制 他实现了这两个接口
Callable<Integer> myResult=。。。;
FutureTask<Integer> task=new FutureTask<Integer>(myResult);
Thread t = new Thread(task);//实现了Runnable接口
t.start();
...
Integer result = task.get();//实现了Future接口
#10
可以讲下用这个接口侦听线程的具体使用方法吗?
#11
Thread bt = null;
str.append("Trace info:\r\n");
for (int i = 0; i < runThreads.size(); i++) {
bt = runThreads.get(i);
str.append(bt);
str.append(" state:");
str.append(bt.getState().toString());
str.append("\r\n");
try{
StackTraceElement[] ste = bt.getStackTrace();
for (int j = 0; j < ste.length; j++) {
str.append(ste[j]);
str.append("\r\n");
}
}
catch(Exception e){
str.append("trace fail ...");
}
}
str.append("Trace info:\r\n");
for (int i = 0; i < runThreads.size(); i++) {
bt = runThreads.get(i);
str.append(bt);
str.append(" state:");
str.append(bt.getState().toString());
str.append("\r\n");
try{
StackTraceElement[] ste = bt.getStackTrace();
for (int j = 0; j < ste.length; j++) {
str.append(ste[j]);
str.append("\r\n");
}
}
catch(Exception e){
str.append("trace fail ...");
}
}