请教一个多线程的问题: 有两个线程,一个用于查询,查询可能很慢,所以,第二个线程就是用来停掉第一个查询线程。第二个线程内调用第一个线程thread.interrupt();但是之后第一个线程还是能继续执行下去。请教为何?如果停第一个,第一次用多线程,谢谢大家指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 thread.interrupt(); 只是使它从wait\sleep等状态中醒过来并抛出一个错误一般来说,我们不会无条件终止一个线程,因为那样做是很不安全的,我们会在线程的循环量中设置一个boolean变量,设置这个变量为false来达到终止这个线程的目的如果你一定要无条件终止这个线程,那么用destroy()方法吧. JDBC 不是你这么用的,如果你的 JDBC 驱动支持 Statement.setQueryTimeout(int seconds) 此方法,那直接用它设置查询超时时间多简单。以下摘自 JDK API 文档:void setQueryTimeout(int seconds) throws SQLException将驱动程序等待 Statement 对象执行的秒数设置为给定秒数。如果超过该限制,则抛出 SQLException。JDBC 驱动程序必须将此限制应用于 execute、executeQuery 和 executeUpdate 方法。JDBC 驱动程序实现也可以将此限制应用于 ResultSet 方法(有关详细信息,请参考驱动程序供应商文档)。 参数:seconds - 以秒为单位的查询超时限制;0 表示没有任何限制 抛出:SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者不满足条件 seconds >= 0 谢谢大家,我的目的并不是因为查询速度或者超时。因为我的前台查询是多线程的:点查询按钮调用后台查询服务,点取消按钮可以取消前台的查询进程(前台是C++的,通过C++BUILDER可以实现直接停前台的查询进程)。这样就有一个问题:前台的查询停止后台的却仍旧工作,如果很多用户在很多前台上一直不停地点“查询”、“停止”,后台会一直产生新的调用服务并运行,内存不够可能会挂掉。这个比查询慢或超时更重要。回3楼的同学:destroy()是没有函数体的,这个方法没用的所以最好能有个能直接干掉Runnable.run()的方法^_^国庆快乐! 要直接“干掉”线程,那用 Thread.stop() 吧,如果处理不好后果很严重,慎用。 这个方法已经废弃了,看样子跑到run()里面就做不掉了 这个代码比值比的是前四位吗? 问下JDK1.4版的用什么语法输入呀? 各位帮忙指点指点!!!先谢谢了。 JavaBean中文乱码 初学者无法通过编译 等腰三角形 菜鸟求教:关于接口的问题 请问怎么样输入1个1位字以上的数,和字符串,有没有现实此功能的函数? 关于JOptionPane.showMessageDialog 的问题 关于Swing、AWT、Applet的困惑... jdk1.5下那个子版本比较稳定? jdk5.0中的包装类
只是使它从wait\sleep等状态中醒过来并抛出一个错误一般来说,我们不会无条件终止一个线程,因为那样做是很不安全的,我们会在线程的循环量中设置一个boolean变量,设置这个变量为false来达到终止这个线程的目的如果你一定要无条件终止这个线程,那么用destroy()方法吧.
void setQueryTimeout(int seconds) throws SQLException
将驱动程序等待 Statement 对象执行的秒数设置为给定秒数。如果超过该限制,则抛出 SQLException。JDBC 驱动程序必须将此限制应用于 execute、executeQuery 和 executeUpdate 方法。JDBC 驱动程序实现也可以将此限制应用于 ResultSet 方法(有关详细信息,请参考驱动程序供应商文档)。
参数:
seconds - 以秒为单位的查询超时限制;0 表示没有任何限制
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者不满足条件 seconds >= 0
我的目的并不是因为查询速度或者超时。因为我的前台查询是多线程的:点查询按钮调用后台查询服务,点取消按钮可以取消前台的查询进程(前台是C++的,通过C++BUILDER可以实现直接停前台的查询进程)。这样就有一个问题:前台的查询停止后台的却仍旧工作,如果很多用户在很多前台上一直不停地点“查询”、“停止”,后台会一直产生新的调用服务并运行,内存不够可能会挂掉。这个比查询慢或超时更重要。回3楼的同学:destroy()是没有函数体的,这个方法没用的所以最好能有个能直接干掉Runnable.run()的方法^_^国庆快乐!
要直接“干掉”线程,那用 Thread.stop() 吧,如果处理不好后果很严重,慎用。
这个方法已经废弃了,看样子跑到run()里面就做不掉了