- 浏览: 246321 次
-
文章分类
最新评论
1.Thread.stop和suspend避免使用,容易造成死锁等不可意见的问题。
Java线程关闭,总的来说有3种:
1.使用状态位,这个简单,就不多说了:
public class Task extends Thread {
private volatile boolean flag= true;
public void stopTask() {
flag = false;
}
@Override
public void run() {
while(flag){
/* do your no-block task */
}
}
}
2.当线程等待某些事件发生而被阻塞,又会发生什么?当然,如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、Thread.sleep等,这里仅举出一些。他们都可能永久的阻塞线程。即使发生超时,在超时期满之前持续等待也是不可行和不适当的,所以,要使用某种机制使得线程更早地退出被阻塞的状态。这个时候你可以使用Thread.interrupt();
public class BlockTask extends Thread {
@Override
public void run() {
try {
while (!Thread.interrupted()) {
/* do your block task*/
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只能解决跑出InterruptedException异常的阻塞。而interrupt()并不是关闭阻塞线程,而是解除阻塞。那这里就举出一个关闭线程阻塞的例子:
1 public class BlockTask extends Thread {
2 @Override
3 public void run() {
4 try {
5 sleep(10000);
6 } catch (InterruptedException e) {
7 System.out.println("if yout use interrupt you will see me");
8 }
9
10 }
11 public static void main(String[] args)throws Exception {
12 // TODO Auto-generated method stub
13 BlockTask task = new BlockTask();
14 task.start();
15 Thread.sleep(1000);
16 task.interrupt();
17
18 }
19 }
3.上面说了,interrupt()只能解决InterruptedException的阻塞的线程,那么遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法
1 public class SocketTask extends Thread {
2 private volatile ServerSocket server;
3
4 public void stopTask(){
5 try {
6 if(server!=null){
7 server.close();
8 System.out.println("close task successed");
9 }
10 } catch (IOException e) {
11 System.out.println("close task failded");
12 }
13 }
14 @Override
15 public void run() {
16 try {
17 server = new ServerSocket(3333);
18 } catch (IOException e) {
19 e.printStackTrace();
20 }
21 }
22
23 public static void main(String[] args) throws InterruptedException {
24
25 SocketTask task = new SocketTask();
26 task.start();
27 Thread.sleep(1000);
28 task.stopTask();
29 }
30
发表评论
-
mac svn版本
2014-11-14 15:21 870http://xiayong.blog.51cto.com ... -
lucene索引结构比较好得博客
2014-11-03 21:16 648http://www.cnblogs.com/forfutur ... -
lucene再64位系统上使用MMapDirectory
2014-11-03 20:18 2106引子http://www.cnblogs.com/huang ... -
mvn发布单个文件
2014-10-31 15:38 649由于平时我们开发都是一个大项目中包含几个子项目,需要depl ... -
使用 ObjectOutputStream 可能引起的内存泄漏
2014-10-30 17:14 1469场景,线上堆栈10G,平时内存使用达到8个G而 ... -
CMS GC时出现promotion failed和concurrent mode failure
2014-10-29 23:44 839对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中 ... -
jboss发布war
2014-10-23 13:09 744http://www.blogjava.net/hello-y ... -
netty学习blog
2014-10-09 16:04 628http://www.infoq.com/cn/article ... -
java多线程
2014-10-08 13:37 618http://www.cnblogs.com/skywang1 ... -
volatile和重排序得一些小疑问
2014-09-24 15:38 1628http://yeziwang.iteye.com/blog ... -
内存映射文件
2014-09-19 11:09 731简介: 内存映射文件与虚拟内存有些类 ... -
心跳机制 heartbeat
2014-08-05 23:13 1815心跳机制可以分为集中式和分散式,简单说集中式 ... -
一个性能瓶颈分析的过程
2014-07-29 16:19 543引自http://blog.csdn.net/axm ... -
zip gzip
2014-07-29 15:09 610http://www.differencebetween. ... -
mvn expected: CRLF
2014-07-03 14:36 782Checkstyle error is not severe ... -
git远程分支更新
2013-10-09 16:44 888git remote prune origin清理掉远程不存 ... -
关于synchronized一个字符串的问题
2013-07-25 11:12 6296在memcached中我们公司首先根据查询条件获得key,然 ... -
php树型无限级分类结构[预排序遍历树算法]
2013-07-22 18:22 888预排序遍历树算法 modi ... -
linux下打开class文件
2013-03-04 20:22 2446linux下打开class文件 hexdump -C *.cl ... -
对象分配规则
2013-02-27 14:03 862对象分配规则 1.对象优先分配在Eden区,如果Eden区 ...
相关推荐
Java线程编程是Java开发中的重要组成部分,尤其在如今并发处理和高性能系统设计中不可或缺。本教程将深入探讨Java多线程的相关概念、原理及实战技巧。 首先,我们需要理解什么是线程。线程是程序执行的基本单元,一...
《Java 7并发编程实战手册》是一本深入探讨Java并发编程的权威著作,它涵盖了大量实用的技巧和最佳实践,旨在帮助开发者在多线程环境下编写高效、安全的代码。这本书的实例代码提供了丰富的示例,使读者能够直观地...
《Java多线程编程实战指南 设计模式篇》是一本深度探讨Java并发编程与设计模式融合的书籍。在Java编程中,多线程是提升系统性能、实现并行计算的关键技术,而设计模式则是解决常见问题的最佳实践。本书旨在帮助...
通过阅读《Java 7并发编程实战手册》的代码中文版,开发者可以更好地理解如何在实际项目中运用这些技术,提高代码的并发性能和程序的稳定性。同时,了解这些特性对于向Java 8和其他更高版本的迁移也是十分有益的。
在本项目中,"Java代码写的局域网多线程TCP、Socket多人聊天室winsock.zip" 是一个基于Java实现的局域网多用户聊天应用。这个应用利用了TCP(Transmission Control Protocol)协议和Socket编程,同时采用了多线程...
《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...
综上所述,这份资料是一个全面的Java学习资源,结合理论知识和实战代码,对于希望掌握Java编程的人极具价值。通过深入学习,不仅可以掌握Java语言本身,还能了解其在实际项目中的应用,为今后的软件开发打下坚实基础...
│ 高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │ 高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲...
本项目是针对Java毕业设计的一份源码实现...通过研究这份源码,可以提升对Java多线程编程、网络通信及安全性的实战能力,对IT计算机专业的学习和职业发展有显著帮助。实践中遇到的问题和解决方案都值得深入探讨和学习。
本书“Java 7并发编程实战手册”深入探讨了这个主题,虽然这里提供的源码并非书本自带,而是作者独立编写的,但它们同样能帮助我们理解并实践Java 7中的并发概念。 首先,我们要了解Java中的并发基础。Java 5引入了...
《疯狂Java实战演义》是Java编程领域的一本经典书籍,由杨恩雄老师编写,深受广大Java开发者喜爱。这本书不仅提供了丰富的理论知识,还强调了实战应用,旨在帮助读者深入理解和掌握Java技术。源码和PDF的免费提供,...
一个Java线程经历了新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)五个状态。线程的启动、同步、中断和停止操作都会影响线程的状态转换。 1. **线程创建与启动**:通过`new...
`ExecutorService`是Java提供的高级线程池接口,它可以控制线程的数量,重用线程,以及管理线程的生命周期。 - **示例代码**: ```java ExecutorService executor = Executors.newFixedThreadPool(5); // 创建固定...
《Java开发实战1200例》是一本深入实践的编程书籍,专注于通过大量实例来提升读者的Java编程技能。书中的例子涵盖了基础语法、面向对象编程、异常处理、集合框架、多线程、网络编程、数据库操作、GUI设计等多个核心...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,从而提高系统效率...在IdeaProjects这样的学习资源中,通常会包含相关的代码示例、实战项目和讲解文档,帮助开发者深入理解和掌握Java多线程技术。
在本Java基础实战银行项目中,我们主要关注的是利用Java编程语言来实现一套完整的银行系统。这个项目旨在帮助初学者巩固Java基础知识,并将其应用于实际的软件开发过程中。项目需求是项目开发的起点,它定义了系统应...
Java聊天软件是一款基于Java编程语言实现的实时通讯应用,它允许用户通过网络进行文本、...通过研究这个Java聊天软件的源代码,开发者可以深入了解上述技术的实战应用,进一步提升自己的Java编程技能和网络编程能力。
根据提供的文档信息,我们可以深入分析并提取出与Java五子棋源代码相关的多个知识点: ### 1. Java网络编程基础 在Java五子棋项目中,客户端与服务器之间的通信是通过网络实现的。这里涉及到了Java网络编程的基础...
在Java中,线程安全的声明可以通过注解来表达,如`@ThreadSafe`和`@NotThreadSafe`,这有助于代码的文档化和审查。`@GuardedBy`注解可以明确指定哪些字段或方法需要同步保护。这些注解配合Java提供的同步机制,如`...
│ 高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │ 高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲...