- 浏览: 822426 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
Java多线程总结
由1个以上的线程所构成的程序称为多线程程序。Java语言写成的程序一定是从主程序开始操作,所以必须在程序的某个位置启动新的线程,才能算是真正的多线程程序。
1、 线程启动
1) 利用Thread类的子类
新写一个类,继承自Thread,重写里面的run()方法。在主程序里调用start()方法,就会启动一个线程,并执行run()内的代码。注意,被调用出来的新线程是start方法,而非run()方法。当然也可以调用run()方法,只是这样不会启动新的线程。
调用start方法后,Java执行处理系统就会在背后启动新的线程。再由这个新的线程调用run()方法。调用run()方法时,会有两个操作:
·启动新的线程
·调用run()方法
注意类的实例和线程本身是两个不同的部分。即使建立了类的实例,也还没有启动线程,而且就算线程已近结束,类的实例也不会就这样消失不见。
在主线程内启动两个两个子线程后,即使主线程立即结束,整个程序也不能算做完全结束,一直要等到所有线程都已近结束,程序才会结束。
当所有线程都结束是,程序也就结束了。不过,在判断是否结束是,并不包括daemon thread。也就是说,即使daemon thread还在,只要非daemon thread的线程都已近结束,程序即已近停止。
2) 利用Runnable接口
已实现Runnable接口的类必须实现run()方法。其过程如下:建立一个实现了Runnable接口的类,将该类实例传给Thread的构造器,调用start()方法。
Thread类本身也实现了Runnable接口,也有run()方法。只不过Thread类的run()方法为空,没有执行任何部分。Thread类的run()方法通常都是被子类覆盖的。
2、 线程的暂时停止
利用Thread类的sleep()方法即可以暂时停止线程的执行操作。sleep()方法在调用时被放在try-catch语句里面,这是因为sleep()方法可能会抛出也给InterruptedException的异常,这是用在取消线程处理时的异常。
利用sleep()方法所设置的暂时停止时间并不是很精密,所以不太适合用在实时控制的方面。若利用以下的语法结构,则可以ns(10^-9)为单位设置停止时间。
Thread.sleep(ms,ns);
不过一般的Java处理系统并不需要用到这么精密的控制方式。实时上,控制的精度有多高要依Java处理系统而定。
如果要唤醒被Thread.sleep暂停的线程,则可利用interrupt方法。
3、 线程的共享互斥:
1) sychronized
当一个方法加上关键字sychronized声明后,就可以让1个线程操作这个方法。这里指每次只有一个线程可以执行这个方法,这个方法有被称为同步方法。非sychronized就没有这个限制同时可供2个以上的线程执行。
一旦一个线程执行sychronized方法就获得一把锁,可以防止其他线程进入;当执行结束时,锁就释放了。当锁释放后,刚才因为所定而不得其门而入的多个线程便开始抢夺锁定,一定会有一个线程获得锁定。在同一时间点获取锁定的也只有一个线程,若等待的线程不止一个,没抢到得线程就得继续等候。
线程共享互斥的构架称为监视(monitor),而获取锁定时有时也称为持有(own)监视。
2) sychronized阻挡
如果只想启动方法里一部分的线程,而非启动整个方法时,则可使用sychronized阻挡,其格式如下
Sychronized(表达式){
……
}
则需要使用sychronized阻挡
4、 线程的协调
当有一个线程正在执行sychronized方法时,其它线程无法执行该方法。这是简单的型的共享互斥。进一步要求就是“空间是否有空闲”为条件进行线程处理。Java里有wait(),notify()和notifyAll()三个方法可进行这个处理。其中,wait()是让线程乖乖等候的方法,而notify()和notifyAll()则是启动等候中的线程的方法。
1) wait set
所有实例都有一个wait set,wait set是一个在执行该实例的wait方法是、操作停止的线程的集合。一执行wait方法时,线程便会暂时停止操作,进入wait set。只有在下面几种情况才有可能推出wait set。
·有其它线程以notify()方法唤醒该线程;
·有其它线程以notifyAll()方法唤醒该线程;
·有其它线程以interrupt()方法唤醒该线程;
·wait方法已经到期了。
wait set是一个虚拟的概念。它既不是实例的字段,也不是可以获取在实例wait中线程的列表的方法。
使用notify()方法时,有一个线程将会从wait set里退出,被notify唤醒的线程并不是在notify的一瞬间重新开始执行的。这是因为notify()的那一刻,执行notify()的线程还握着锁不放,所以其它线程无法获取该实例的锁。
假设执行notify()方法时,wait set里正在等候的线程不止1个。规格里并没有注明此时该选择哪一个线程。究竟是选择等待线程列表中的第一个,随机选择或是另以其它方式选择,则依Java处理系统的而异。因此在写程序时,程序属性最好不要写成会因所选线程而又所变动。
若没有锁定的线程去调用wait(),notify()或notifyAll()时,便会抛出异常java.lang.IllegalMonitorStateException。
notify()方法和notifyAll()方法两者非常相似,到底该用哪一个?老实说,这个选择有点难。
选择notify的话,因为要唤醒的线程比较少,程序处理速度当然比notifyAll()略胜一筹。
但选择notify()时,若这部分处理得不好,可能会有程序挂掉的危险性。一般来说,选择notifyAll()所写出来的程序代码会比选择notify()可靠。
除非能确定对程序的代码意义一清二楚,否则选择notifyAll()应该稳扎稳打。
由1个以上的线程所构成的程序称为多线程程序。Java语言写成的程序一定是从主程序开始操作,所以必须在程序的某个位置启动新的线程,才能算是真正的多线程程序。
1、 线程启动
1) 利用Thread类的子类
新写一个类,继承自Thread,重写里面的run()方法。在主程序里调用start()方法,就会启动一个线程,并执行run()内的代码。注意,被调用出来的新线程是start方法,而非run()方法。当然也可以调用run()方法,只是这样不会启动新的线程。
调用start方法后,Java执行处理系统就会在背后启动新的线程。再由这个新的线程调用run()方法。调用run()方法时,会有两个操作:
·启动新的线程
·调用run()方法
注意类的实例和线程本身是两个不同的部分。即使建立了类的实例,也还没有启动线程,而且就算线程已近结束,类的实例也不会就这样消失不见。
在主线程内启动两个两个子线程后,即使主线程立即结束,整个程序也不能算做完全结束,一直要等到所有线程都已近结束,程序才会结束。
当所有线程都结束是,程序也就结束了。不过,在判断是否结束是,并不包括daemon thread。也就是说,即使daemon thread还在,只要非daemon thread的线程都已近结束,程序即已近停止。
2) 利用Runnable接口
已实现Runnable接口的类必须实现run()方法。其过程如下:建立一个实现了Runnable接口的类,将该类实例传给Thread的构造器,调用start()方法。
Thread类本身也实现了Runnable接口,也有run()方法。只不过Thread类的run()方法为空,没有执行任何部分。Thread类的run()方法通常都是被子类覆盖的。
2、 线程的暂时停止
利用Thread类的sleep()方法即可以暂时停止线程的执行操作。sleep()方法在调用时被放在try-catch语句里面,这是因为sleep()方法可能会抛出也给InterruptedException的异常,这是用在取消线程处理时的异常。
利用sleep()方法所设置的暂时停止时间并不是很精密,所以不太适合用在实时控制的方面。若利用以下的语法结构,则可以ns(10^-9)为单位设置停止时间。
Thread.sleep(ms,ns);
不过一般的Java处理系统并不需要用到这么精密的控制方式。实时上,控制的精度有多高要依Java处理系统而定。
如果要唤醒被Thread.sleep暂停的线程,则可利用interrupt方法。
3、 线程的共享互斥:
1) sychronized
当一个方法加上关键字sychronized声明后,就可以让1个线程操作这个方法。这里指每次只有一个线程可以执行这个方法,这个方法有被称为同步方法。非sychronized就没有这个限制同时可供2个以上的线程执行。
一旦一个线程执行sychronized方法就获得一把锁,可以防止其他线程进入;当执行结束时,锁就释放了。当锁释放后,刚才因为所定而不得其门而入的多个线程便开始抢夺锁定,一定会有一个线程获得锁定。在同一时间点获取锁定的也只有一个线程,若等待的线程不止一个,没抢到得线程就得继续等候。
线程共享互斥的构架称为监视(monitor),而获取锁定时有时也称为持有(own)监视。
2) sychronized阻挡
如果只想启动方法里一部分的线程,而非启动整个方法时,则可使用sychronized阻挡,其格式如下
Sychronized(表达式){
……
}
则需要使用sychronized阻挡
4、 线程的协调
当有一个线程正在执行sychronized方法时,其它线程无法执行该方法。这是简单的型的共享互斥。进一步要求就是“空间是否有空闲”为条件进行线程处理。Java里有wait(),notify()和notifyAll()三个方法可进行这个处理。其中,wait()是让线程乖乖等候的方法,而notify()和notifyAll()则是启动等候中的线程的方法。
1) wait set
所有实例都有一个wait set,wait set是一个在执行该实例的wait方法是、操作停止的线程的集合。一执行wait方法时,线程便会暂时停止操作,进入wait set。只有在下面几种情况才有可能推出wait set。
·有其它线程以notify()方法唤醒该线程;
·有其它线程以notifyAll()方法唤醒该线程;
·有其它线程以interrupt()方法唤醒该线程;
·wait方法已经到期了。
wait set是一个虚拟的概念。它既不是实例的字段,也不是可以获取在实例wait中线程的列表的方法。
使用notify()方法时,有一个线程将会从wait set里退出,被notify唤醒的线程并不是在notify的一瞬间重新开始执行的。这是因为notify()的那一刻,执行notify()的线程还握着锁不放,所以其它线程无法获取该实例的锁。
假设执行notify()方法时,wait set里正在等候的线程不止1个。规格里并没有注明此时该选择哪一个线程。究竟是选择等待线程列表中的第一个,随机选择或是另以其它方式选择,则依Java处理系统的而异。因此在写程序时,程序属性最好不要写成会因所选线程而又所变动。
若没有锁定的线程去调用wait(),notify()或notifyAll()时,便会抛出异常java.lang.IllegalMonitorStateException。
notify()方法和notifyAll()方法两者非常相似,到底该用哪一个?老实说,这个选择有点难。
选择notify的话,因为要唤醒的线程比较少,程序处理速度当然比notifyAll()略胜一筹。
但选择notify()时,若这部分处理得不好,可能会有程序挂掉的危险性。一般来说,选择notifyAll()所写出来的程序代码会比选择notify()可靠。
除非能确定对程序的代码意义一清二楚,否则选择notifyAll()应该稳扎稳打。
发表评论
-
io流总结
2010-08-15 12:30 1198Java IO的一般使用原则: 一、按数据来源(去向)分类: ... -
java线程总结
2010-08-15 11:37 1182首先要理解线程首先需 ... -
Java基础IO流的简单总结
2010-08-13 13:06 1251Java基础IO流的简单总结 刚好初级部分讲到了IO流这一块 ... -
Java IO流各种使用方式总结
2010-08-13 13:03 1276Java IO流各种使用方式总结 ①针对普通文本 ... -
线程和进程
2010-08-01 19:18 1077进程和线程的异同点 By Aillo on May 13, 2 ...
相关推荐
【JAVA多线程总结】 Java 多线程是Java编程中的关键特性,它允许程序同时执行多个任务,提高系统的效率和响应性。本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java...
Java多线程是Java编程语言中的一个重要特性,它允许开发者创建并发执行的多个线程,从而提高程序的执行效率和响应速度。Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 ### 继承Thread类 在...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关知识点,包括线程的创建、线程的状态、同步机制以及线程安全问题。 1. **线程的创建*...
配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
Java多线程是指在Java语言中同时运行多个线程,从而实现对任务的并行处理。这是Java中一个非常重要的概念和技能,尤其在需要高并发处理和优化性能的场景中显得尤为重要。以下将详细梳理Java多线程编程中的一些关键...
Java多线程是Java编程语言中的一个重要特性,它允许在单个程序中同时执行多个代码路径,从而提高程序的效率和响应性。在Java中,线程生命周期包括六种状态:新建状态(NEW)、可运行状态(RUNNABLE)、休眠状态...
Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。多线程允许程序同时执行多个任务,提高了系统资源的利用率,提升了应用程序的响应速度和并发性能。对于大型分布式系统、Web应用...
java多线程思维导图总结【超详细,可下载】
### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...
### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的...
### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...
java多线程全面总结,简单的介绍多线程技术中的各种应用问题,是你对多线程有更多的认识!
JAVA 多线程总结 扩展java lang Thread类 实现java lang Runnable接口
总结起来,“JAVA多线程编程技术PDF”涵盖了多线程的基本概念、同步机制、线程通信、死锁避免、线程池以及线程安全的集合类等内容。通过深入学习这份资料,开发者可以全面掌握Java多线程编程技术,提升程序的并发...
总结一下,Java多线程涉及的内容广泛,包括线程的基本概念、创建、状态转换、调度和优先级管理。理解并掌握这些知识点对于编写高效并发的Java程序至关重要,也是面试中必不可少的技术点。在实际编程中,合理利用多...
总结来说,这个实验源码涵盖了Java多线程的基础和应用,包括线程的创建、运行、同步、通信,以及网络编程和数据库操作。通过这些实验,学生可以深入理解Java并发编程的核心概念,并掌握实际开发中的多线程设计技巧。
Java多线程程序设计是Java开发中的重要组成部分,它允许程序在同一时间执行多个任务,从而提高了系统的效率和响应性。本文将深入探讨Java多线程的相关概念和实现方式。 一、理解多线程 1. **线程定义**:线程是一...