- 浏览: 562775 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
我们知道,我们通过调用线程的start方法启动一个线程,那么,我们可以直接调用run方法来启动一个线程吗? 先看下面一段代码: Java代码 1. public class Test { 2. public static void main(String[] args) { 3. // TODO Auto-generated method stub 4. TestThread tt = new TestThread(); 5. tt.run(); 6. } 7. } 8. 9. class TestThread extends Thread { 10. static int i = 0; 11. final static int MAX_I = 10; 12. 13. @Override 14. public void run() { 15. // TODO Auto-generated method stub 16. while (i < MAX_I) { 17. System.out.println(i++); 18. } 19. } 20. } 运行结果如下: Java代码 1. 0 2. 1 3. 2 4. 3 5. 4 6. 5 7. 6 8. 7 9. 8 10. 9 或许有人会得出结论,这样启动一个线程是可以的,我们再对程式稍做修改,大家就会发现一个问题: Java代码 1. public class Test { 2. public static void main(String[] args) { 3. // TODO Auto-generated method stub 4. TestThread tt = new TestThread(); 5. tt.run(); 6. System.out.println("Printed by main thread"); 7. } 8. } 9. 10. class TestThread extends Thread { 11. static int i = 0; 12. final static int MAX_I = 10; 13. 14. @Override 15. public void run() { 16. // TODO Auto-generated method stub 17. while (i < MAX_I) { 18. System.out.println(i++); 19. } 20. } 21. 22. } 这里只在主线程中加入了一行代码,打印一行"Printed by main thread",运行代码,结果如下: Java代码 1. 0 2. 1 3. 2 4. 3 5. 4 6. 5 7. 6 8. 7 9. 8 10. 9 11. Printed by main thread 熟练多线程开发的要发现问题了,为什么"Printed by main thread"会打印在最后一行呢?TestThread类中一直持有时间段吗? 我们对上面的代码进行分析,其实非常简单,这只是一个普通的类中方法的调用,其实是一个单线程的执行,我们来修改代码进一步验证这一点: Java代码 1. public class Test { 2. public static void main(String[] args) { 3. // TODO Auto-generated method stub 4. TestThread tt = new TestThread(); 5. tt.run(); 6. System.out.println(Thread.currentThread().getName()); 7. System.out.println("Printed by main thread"); 8. } 9. } 10. 11. class TestThread extends Thread { 12. static int i = 0; 13. final static int MAX_I = 10; 14. 15. @Override 16. public void run() { 17. // TODO Auto-generated method stub 18. System.out.println(Thread.currentThread().getName()); 19. while (i < MAX_I) { 20. System.out.println(i++); 21. } 22. } 23. } 这段代码分别在主线程和我们的TestThread的方法中打印当前线程名字,运行结果如下: Java代码 1. main 2. 0 3. 1 4. 2 5. 3 6. 4 7. 5 8. 6 9. 7 10. 8 11. 9 12. main 13. Printed by main thread 在TestThread类和主线程中运行的是同一个线程,说明在直接调用run时是不能使用多线程的,那么把上面的run方法调用改为start方法的调动再看一下: Java代码 1. public class Test { 2. public static void main(String[] args) { 3. // TODO Auto-generated method stub 4. TestThread tt = new TestThread(); 5. tt.start(); 6. System.out.println(Thread.currentThread().getName()); 7. System.out.println("Printed by main thread"); 8. } 9. } 10. 11. class TestThread extends Thread { 12. static int i = 0; 13. final static int MAX_I = 10; 14. 15. @Override 16. public void run() { 17. // TODO Auto-generated method stub 18. System.out.println(Thread.currentThread().getName()); 19. while (i < MAX_I) { 20. System.out.println(i++); 21. } 22. } 23. } 运行结果如下: Java代码 1. main 2. Thread-0 3. 0 4. 1 5. 2 6. 3 7. 4 8. 5 9. 6 10. 7 11. 8 12. Printed by main thread 13. 9 很明显,这才是我们想看到的结果,所以结论是只有调用Thread的start方法,将线程交由JVM控制,才能产生多线程,而直接调用run方法只是一个普通的单线程程式。
发表评论
-
熔岩的相关文章收藏
2011-02-20 21:57 1361HttpClient4 Post XML到一个服务器上 纯J ... -
我新弄的博客和论坛+新浪微博
2011-02-01 00:05 1723主博客是:http://www.liuxinglany ... -
Java编程思想 (收藏)
2011-01-07 15:34 9481、面向对象的特性 2、内存分配 3、 ... -
Java解惑系列(收藏)
2011-01-07 15:30 11491.1 java解惑你知多少(一) 1.2 jav ... -
2010 iData Forum 演讲幻灯片
2010-12-25 21:44 10032010年iData Forum数据库大会顺利结束,在 ... -
2010年6月的好文推荐
2010-12-20 20:39 856转自:人云亦云 最近发现一个非常不错的博客,叫dbthi ... -
JAVA通过JNI调用本地C语言方法
2010-12-19 20:49 763Java特性深受人们喜爱, ... -
java集合类比较
2010-12-19 20:49 1245Vector(转者注:现在Ve ... -
java对各种文件的操作详解(转)
2010-12-19 20:31 793http://blog.csdn.net/Java2King/ ... -
从一个http请求的详细过程---理解计算机网络
2010-12-18 13:58 1461http://duanple.blog.163.com/b ... -
(转)学习:一个并发的Cache
2010-12-17 17:11 990public class Memoizer implem ... -
Groovy是怎么实现createArray的
2010-12-16 19:57 720Groovy是一个基于 Java虚拟机的敏捷 动态语言。构 ... -
24款较经典的Page翻页分页css代码
2010-12-12 17:52 745<!DOCTYPE html PUBLIC &qu ... -
比较优秀的值得学习的J2EE开源项目
2010-12-12 12:53 984这篇文章写在我研究J2 ... -
J2EE的部分jar的作用
2010-12-05 10:44 1068来自:深沉的船 activation.jar:与javaMa ... -
Java的多线程Socket通信
2010-12-04 21:21 858转:http://wangtong40.iteye.com/b ... -
Java的单线程Socket通信
2010-12-04 21:21 873package com.wangtong.networ ... -
Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序
2010-12-04 21:19 908转自http://www.ibm.com/develope ... -
高效编程之欲擒故纵
2010-12-04 13:36 801转:http://www.aqee.net/2010/11/3 ... -
架构师给程序员的一封信
2010-12-04 13:35 814转:http://www.aqee.net/2010/ ...
相关推荐
综上所述,设计打磨成仿牛角尖外形的笔尖是一个融合了艺术、工程和用户需求的复杂过程。它涉及到材料科学、机械加工技术、质量控制以及对用户体验的深刻理解。通过不断的创新和优化,这样的设计可以为用户带来更为...
介绍Croissant是一个轻量级的Java库,它为Bukkit / Spigot / Paper插件提供了命令框架和GUI框架。 以下是其功能的简短摘要: 命令框架无需在插件的plugin.yml文件中声明命令自动参数解析和制表符补全从推断参数可以...
我们需要在Java项目中引入JODConverter的依赖库,然后创建一个OfficeManager实例,设置OpenOffice的路径和服务端口,接着就可以调用convert方法进行转换操作。例如,将一个DOC文档转换为PDF: ```java Office...
牛角包的Lu Lua REPL提供了一个友好且功能丰富的界面,支持自动补全、语法高亮、错误提示等,大大提升了开发者的编程体验。 2. **调试器的重要性** 调试器是开发者的好朋友,它帮助我们找出程序中的错误和异常。...
在深入解读《电子:中国半导体:牛角峥嵘》这篇报告之前,首先要明确几个核心的概念。首先,半导体是指那些在特定温度下导电性能介于导体和绝缘体之间的材料,常被应用于制造各种电子设备的微小组件中,如晶体管、...
在这个场景中,"java注解方式实现拦截接口重复提交"是为了解决一个常见的问题:如何避免用户在短时间内多次调用同一接口,导致服务器处理重复请求,可能引发资源浪费或数据不一致。 首先,我们需要定义一个自定义...
之前一直在找牛角座等各种插座的规格封装,很难找到,最后找到了
这是一款在线工具箱程序,您可以通过安装扩展增强她的功能 通过插件模板的功能,您也可以把她当做网页导航来使用 环境要求: PHP >= 7.2.5 MySQL >= 5.7 fileinfo扩展 使用Redis缓存需安装Redis扩展 去除禁用函数...
通达信指标公式源码【黑马启动】捕捉大牛股的牛角!(图、源码).doc
在Java开发中,Elasticsearch是一个非常重要的搜索引擎和分析引擎,它基于Lucene构建,提供了分布式、全文检索、实时分析的高性能数据存储解决方案。在Elasticsearch 5.3版本中,为了使其能够正常运行,我们需要集成...
- **防止误插设计:** 设计中采用了独特的防误插机制,通过在针头端提供一个凸起区域来引导并配合插座上的凸起部分(符合MIL标准),同时插座孔内嵌入定位键以进一步避免误插。 - **适用电缆类型:** 适用的电缆为UL...
这篇报告可能深入剖析了中国半导体产业的现状、挑战与机遇,为读者提供了一个全面了解中国在这一高科技领域崛起的视角。通过详细解读这些内容,无论是从业者还是研究者,都能从中获取有价值的信息和洞察。
1. 三维建模:通过三维CAD软件,可以快速准确地构建出牛角弯头的三维模型,包括每一个圆锥形管节的几何结构。在模型中,能够精确地体现各管节之间的连接关系和角度定位。 2. 展开计算:三维CAD软件可以自动计算每个...
在这个项目中,我们能够看到开发者如何运用C++的基本语法、控制结构、函数和可能的数据结构来实现一个简单的游戏。下面我们将详细探讨与这个项目相关的C++知识点。 1. **基本语法**:C++是一种静态类型的、编译式的...
很抱歉,由于提供的文件信息中【部分内容】中仅包含了一串数字,并...如果您能提供更具体的内容或详细说明文件中牛角按摩梳的使用方法,我将很乐意为您生成所需的知识点。请补充相关信息以便我能够准确回答您的需求。
原牛角源码(修罗bbs)全站程序打包带数据库备份,牛角源码全站数据+全站文件、插件打包分享给大家,有兴趣的可以搭建玩玩! conf文件夹中自己配置数据库链接文件,默认管理账号:admin,密码123456 首页登录后就可以...
而“1001系列”可能指的是该产品线的一个特定型号或规格,这通常涉及到尺寸、载流能力、绝缘材料、耐温性等关键性能指标。 【描述】"OUPIIN 牛角接头1001系列端子3d"的描述虽然简洁,但暗示了该产品可能包含3D模型...
例如,要让模型模拟一个成功的创业者准备一份在【某大学开学典礼】上的【知识改变命运】主题演讲大纲,你可以这样提问: - **明确指令**:请你扮演一个成功的创业者,为在【某大学开学典礼】上的演讲准备一份大纲,...
- `robots.txt`:这是一个告诉搜索引擎爬虫哪些页面可以抓取,哪些不应抓取的文件,对于SEO(搜索引擎优化)有一定的影响。 - `sitemap.xml`:网站地图文件,列出网站的主要页面,有助于搜索引擎更好地理解和索引...