在java中执行的线程时间

时间:2017-02-08 12:44:22

标签: java multithreading

我在java中有一个调用方法的线程。我正在为每个线程存储一个映射,以便我可以杀死它。 我的示例代码是:

<?php
/*
Template Name: search info
*/

get_header();

global $wpdb;  
$result = $wpdb->get_results("select owner-name from wp_owner-info where owner-id= 5");
echo $result;

get_footer();
?>

现在我想通过杀死Thread来停止方法调用,所以我有类似的东西:

<?php
/*
Template Name: search info
*/

get_header();

global $wpdb;  
$result = $wpdb->get_results("select owner-name from owner-info where owner-id= 5");
echo $result;

get_footer();
?>

问题是当我调用我的stop方法时,t.isAlive()为false。我假设方法的执行时间将是线程的活动时间。我是正确还是我误解了它?

3 个答案:

答案 0 :(得分:0)

线程在run()方法返回后也会死亡。在这种情况下,线程将不会存在。将sleep语句添加到run()方法中,并在其前后添加print语句,以确保该线程的当前状态。

Thread.interrupt不会杀死该线程,只是在暂停时恢复它,并且通常手动杀死线程不是一个好主意。阅读this question以了解原因和做什么。

答案 1 :(得分:0)

    As per Thread Class java doc
    https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

Thread.getState() will return you state of the thread
which you can check if thread is still running and then can kill it.

Thread.State = getState() Returns the state of this thread.

A thread state. A thread can be in one of the following states:
NEW
A thread that has not yet started is in this state.
RUNNABLE
A thread executing in the Java virtual machine is in this state.
BLOCKED
A thread that is blocked waiting for a monitor lock is in this state.
WAITING
A thread that is waiting indefinitely for another thread to perform a particular action is in this state.
TIMED_WAITING
A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
TERMINATED
A thread that has exited is in this state.

答案 2 :(得分:-1)

方法的执行时间和线程的活动时间会有所不同。 Here是线程生命周期所说的:

  

调用start()方法后线程处于runnable状态,但是线程调度程序没有选择它作为正在运行的线程。

因此,调用<span class="flag-icon flag-icon-gr"></span>方法并不一定能保证线程的执行。这取决于jvm和Opetating System如何处理线程。在启动<span class="flag-icon flag-icon-gr"></span>方法之前,线程可能会保持start()状态一段时间,或者一旦调用runnable,线程可能会executeMethod开始,但这些线索中的任何一个都不是保证。这就是javadoc所说的:

  

每个帖子都有优先权。具有较高优先级的线程优先于具有较低优先级的线程执行。每个线程可能也可能不会被标记为守护进程。当在某个线程中运行的代码创建一个新的Thread对象时,新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时才是守护进程线程。

所以,你不应该期望线程的活动时间是方法的执行时间。