解决方案 »
- 如何令java线程池中线程超过5分钟时该线程自杀
- 谁能提供下webservice的电子书呢?
- 各位能否帮我解答一个struts控制权限的问题(再调用set集合后权限自动转交)在线等,另高分送上!
- 高分求一条HQL多对多查询语句
- 不知道怎么解决的错误
- 关于SQL连接问题
- struts应用中出现找不到actionServlet问题!急
- 请问关于Web Service的书籍
- 100分求JBOSS SERVER端通过SOCKET传输源码,不要EMAIL,能用既给分
- TO DengZhenXiang
- Jsp.jsp was not found on this server.
- hibernate中mysql字段名为关键字的问题
Thread t = new Thread(){
public void run(){
Log.info("*********** 测试2 ***********", "");
}
}.start();
t.join(); //等待
public void run(){
Log.info("*********** 测试2 ***********", "");
}
}.start();
t.join(); //等待这种写法编译不通过!
是指没有callback吗?只打印了“测试1”
-> 测试2没有打印是可以理解的,
但是测试3没有打印是不正常的,除非之前出了异常,即使在thread中出异常也不会导致测试3没有打印。t.join();
-> 加上的原因是等待该线程完成后,继续。想确认
1 到底想什么时候返回ajax回调函数? 测试3打印完还是另外线程方法结束后。
2 因为业务不知道,为什么要异步?要实现什么功能?
现在出现新需求,后台除了返回那个参数外,另外还要做一系列其他的处理。但是这些处理跟用户无关,所以为了不影响正常给用户提示,我将新增加的一系列操作放在了一个新的线程里,不影响给用户正常提示。想要的结果是:ajax 请求过来后,新线程中的操作不影响主线程给前台返回参数,并做提示用。也就是一个线程用来ajax前台页面提示,另外一个线程用来其他事情的操作。刚才测试发现,“测试3”打印出来。想在“测试3”打印完后就返回ajax回调,另外线程继续处理。不知道说明白了没,多谢关注!
也会异步的继续执行,如果该线程为非守护线程,他的生命周期就是run方法
逻辑的结束。新建的线程不会随着request线程的结束而结束。
就会有一个问题,就是页面上显示已经完成,但是其实还有一部分的功能还没有实现。最好在新建的线程结束有一个回调。
new Thread(){
public void run(){
Log.info("*********** 测试2 ***********", "");
return;
}
}.start();
Log.info("*********** 测试3 ***********", "");输出:
*********** 测试1 ***********
回调失败Log.info("*********** 测试1 ***********", "");
//new Thread(){
// public void run(){
// Log.info("*********** 测试2 ***********", "");
// return;
// }
//}.start();
Log.info("*********** 测试3 ***********", "");输出:
*********** 测试1 ***********
*********** 测试3 ***********
回调正常
new Thread(){
public void run(){
Log.info("*********** 测试2 ***********", "");
return;
}
}.start();肯定阻塞了。试试下面的 Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("*********** 测试2 ***********");
}
});
t1.start();
1 Runnable
2 Log.info -> System.out.println
1 Runnable
2 Log.info -> System.out.println还是不行,到 new Thread 就停了!
框架?
页面发布在resin下
java代码没有容器,直接启动jar
没有用框架,java+jsp
Attaching to remote server [pid], please wait...
Error attaching to remote server: java.net.MalformedURLException: invalid URL String: //[pid]/SARemoteDebugger
报错了。
Attaching to remote server pid, please wait...
Error attaching to remote server: java.rmi.ConnectException: Connection refused to host: pid; nested exception is:
java.net.ConnectException: Connection timed out
超时
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x94173228> (a org.apache.hadoop.metrics2.impl.SinkQueue)
at java.lang.Object.wait(Object.java:485)
at org.apache.hadoop.metrics2.impl.SinkQueue.waitForData(SinkQueue.java:109)
- locked <0x94173228> (a org.apache.hadoop.metrics2.impl.SinkQueue)
at org.apache.hadoop.metrics2.impl.SinkQueue.consumeAll(SinkQueue.java:78)
at org.apache.hadoop.metrics2.impl.MetricsSinkAdapter.publishMetricsFromQueue(MetricsSinkAdapter.java:113)
at org.apache.hadoop.metrics2.impl.MetricsSinkAdapter$2.run(MetricsSinkAdapter.java:89) Locked ownable synchronizers:
- None"pool-3-thread-2" prio=10 tid=0x80e85800 nid=0x9c9 waiting on condition [0x80ffe000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x94171418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers:
- None"New I/O server boss #1 (channelId: 2737550, /192.168.0.143:60000)" prio=10 tid=0x81977000 nid=0x9c8 runnable [0x817ad000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:210)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
- locked <0x941733b0> (a sun.nio.ch.Util$2)
- locked <0x941733c0> (a java.util.Collections$UnmodifiableSet)
- locked <0x94173370> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.run(NioServerSocketPipelineSink.java:241)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers:
- <0x94173468> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
- <0x941cef68> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)"pool-3-thread-1" prio=10 tid=0x81989000 nid=0x9c7 waiting on condition [0x817fe000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x94171418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers:
- None"Low Memory Detector" daemon prio=10 tid=0x8319a000 nid=0x9c5 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None"C2 CompilerThread1" daemon prio=10 tid=0x83198000 nid=0x9c4 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None"C2 CompilerThread0" daemon prio=10 tid=0x83196000 nid=0x9c3 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None"Signal Dispatcher" daemon prio=10 tid=0x83194800 nid=0x9c2 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None"Finalizer" daemon prio=10 tid=0x83186400 nid=0x9c1 in Object.wait() [0x830fe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x94176150> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <0x94176150> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) Locked ownable synchronizers:
- None"Reference Handler" daemon prio=10 tid=0x83184c00 nid=0x9c0 in Object.wait() [0x83267000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x94176300> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x94176300> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers:
- None"VM Thread" prio=10 tid=0x83181000 nid=0x9bf runnable "GC task thread#0 (ParallelGC)" prio=10 tid=0x09e5d400 nid=0x9ad runnable "GC task thread#1 (ParallelGC)" prio=10 tid=0x09e5ec00 nid=0x9ae runnable "GC task thread#2 (ParallelGC)" prio=10 tid=0x09e60000 nid=0x9af runnable "GC task thread#3 (ParallelGC)" prio=10 tid=0x09e61800 nid=0x9b0 runnable "GC task thread#4 (ParallelGC)" prio=10 tid=0x09e62c00 nid=0x9b1 runnable "GC task thread#5 (ParallelGC)" prio=10 tid=0x09e64400 nid=0x9b2 runnable "GC task thread#6 (ParallelGC)" prio=10 tid=0x09e65c00 nid=0x9b3 runnable "GC task thread#7 (ParallelGC)" prio=10 tid=0x09e67000 nid=0x9b4 runnable "GC task thread#8 (ParallelGC)" prio=10 tid=0x09e68800 nid=0x9b5 runnable "GC task thread#9 (ParallelGC)" prio=10 tid=0x09e69c00 nid=0x9b6 runnable "GC task thread#10 (ParallelGC)" prio=10 tid=0x09e6b400 nid=0x9b7 runnable "GC task thread#11 (ParallelGC)" prio=10 tid=0x09e6c800 nid=0x9b8 runnable "GC task thread#12 (ParallelGC)" prio=10 tid=0x09e6e000 nid=0x9b9 runnable "GC task thread#13 (ParallelGC)" prio=10 tid=0x09e6f800 nid=0x9ba runnable "GC task thread#14 (ParallelGC)" prio=10 tid=0x09e70c00 nid=0x9bb runnable "GC task thread#15 (ParallelGC)" prio=10 tid=0x09e72400 nid=0x9bc runnable "GC task thread#16 (ParallelGC)" prio=10 tid=0x09e73800 nid=0x9bd runnable "GC task thread#17 (ParallelGC)" prio=10 tid=0x09e75000 nid=0x9be runnable "VM Periodic Task Thread" prio=10 tid=0x8319c000 nid=0x9c6 waiting on condition JNI global references: 1221
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("*********** 测试2 ***********");
}
});
System.out.println("the created thread id: " + t1.getId() + ", thread Name:" + t1.getName());
t1.start();
代码还没有执行到:
System.out.println("the created thread id: " + t1.getId() + ", thread Name:" + t1.getName());
这里,就已经停顿了。
也就是说,t1.start()没有被执行也!