- 浏览: 863616 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
一、run()和start()
这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由Java的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。
二、关键字Synchronized
这个关键字用于保护共享数据,当然前提是要分清哪些数据是共享数据。每个对象都有一个锁标志,当一个线程访问该 对象时,被Synchronized修饰的数据将被“上锁”,阻止其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。
public ThreadTest implements Runnable
{
public synchronized void run(){
for(int i=0;i <10;i++)
{
System.out.println(" " + i);
}
}
public static void main(String[] args)
{
Runnable r1 = new ThreadTest();
Runnable r2 = new ThreadTest();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
}
以上这段程序中的 i 变量并不是共享数据,也就是这里的ynchronized关键字并未起作用。因为t1,t2两个线程是两个对象(r1,r2)的线程。不同的对象其数据是不同的,所以r1和r2两个对象的i变量是并不是共享数据。
当把代码改成如下:Synchronized关键字才会起作用
Runnable r = new ThreadTest();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
三、sleep()
使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常比如有两个线程同时执行(没有Synchronized),一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程sleep(5000)后,低优先级就有机会执行了。
总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。
四、join()
join()方法使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。
五、yield()
它与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会。
六、wait()和notify()、notifyAll()
这三个方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用这三个方法。前面说过Synchronized这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了,如何才能在
当前线程还没退出Synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。
wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等
待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。
notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。
注意: 这三个方法都是java.lang.Ojbect的方法
发表评论
-
操作系统的目标和作用
2012-07-05 23:46 1270操作系统的目标 目前存在着多种类型的OS,不同类型的OS ... -
利用(ffmpeg)生成视频缩略图(java)
2012-07-01 01:11 0对于上传视频生成缩略图使用的是ffmpeg进行生成的。 自己在 ... -
java乱码
2012-06-06 11:33 912自从接触Java和JSP以来, ... -
学习apache commons-io类库中的文件清除器
2011-07-06 23:26 1369学习apache commons-io 1.4类库中的File ... -
java 正则表达式 过滤html标签
2011-05-24 15:10 5296前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字 ... -
转---Eclipse中web-inf和meta-inf文件夹的信息
2011-05-24 13:08 1090Eclipse中web-inf和meta-inf ... -
logback与Log4J的区别
2011-05-17 23:34 1368Logback和log4j是非常相似 ... -
性能优化
2011-04-14 16:10 1116(1)jdbc性能优化 jdbc程序的性能主要由两个因素决定 ... -
JAVA的Random类(转)
2011-04-12 00:21 869Random类中实现的随机算法是伪随机,也就是有规则的随机。在 ... -
非阻塞的Socket链接
2011-04-10 21:59 849import java.io.IOException; ... -
创建临时文件
2011-04-10 21:55 1049package net.java2000.io; ... -
面向对象设计的基本原则
2011-04-07 10:28 1093摘自:http://soft6.com/tech/6/6501 ... -
proxool
2011-04-02 15:01 807属性列表说明: fatal-sql- ... -
当前Java软件开发中几种认识误区
2011-04-01 10:12 831越来越多人开始使用Java ... -
Java中查看一个方法被调用的层次(Reflection、StackTrace)
2011-04-01 00:53 1974package test; public class Mai ... -
反序列化时恢复transient字段
2011-03-30 13:20 1163我们知道将字段设置为transient,可以避免该自动被序列化 ... -
用socket连接服务器直接发送接收邮件
2011-03-22 17:22 1261首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 &l ... -
利用JavaMail收/发Gmail邮件(SSL)
2011-03-22 17:21 2282Gmail目前已经启用了POP3和SMTP服务,具体情况请看 ... -
Java 反射与内省
2011-03-14 22:08 1030一、java反射机制 JAVA反 ... -
关于jdk的注解@SuppressWarnings详解
2011-03-01 15:23 1452@SuppressWarnings J2SE 提供的一个批注或 ...
相关推荐
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
Java多线程程序设计详细解析,详细介绍了多线程的方方面面,是java备考和面试宝典
Java多线程概念及应用详细解析.mht,I love java
本篇文章提供了20道高难度的Java多线程编程面试题及详细解析,旨在帮助开发者展示出卓越的并发编程能力。在当今高并发的应用场景下,对多线程编程的理解和应用是评估面试者的重要指标。通过这些高难度问题,您将全面...
JAVA教程解析Java的多线程机制
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中在代码的重要部分加上标注使读者更加容易...
轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着
Java多线程技术及在CAI中的应用.caj
(注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...
而Java应用程序中的多线程则是共享同一应用系统资源的多个并行代码执行 体,线程之间的通信和协调方法相对简单。 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式...
Java多线程程序设计详细解析.pdf
这是我总结的Java多线程资料 很全 很经典
java多线程解析,看这个就够了
java资料\、文件资料、多线程和xml解析大汇总
本文介绍了多线程环境下自增效率比较及原理解析。在多线程环境下,对于自增操作需要考虑线程安全问题,常见的解决方法包括使用synchronized关键字、AtomicInteger、LongAdder和LongAccumulator等。本文给出了使用...