`
dyllove98
  • 浏览: 1380739 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:38265
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:78567
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:131695
社区版块
存档分类
最新评论

关于java多线程一些心得

阅读更多
1、主线程死掉之后 ,所有在主线程上启动的线程并不会死掉
2、通过把线程加入ThreadGroup可以操作其他同组线程的生命
3、如果想在子线程中杀掉主线程,直接把主线程的Thread的传入子线程即可
4、要想关闭多线程程序,需要把当前所有的线程全部杀死才能关闭
5、各个线程互补影响~父子线程也不会有影响
分享到:
评论
24 楼 C_J 2010-05-31  
zhaspe 写道

如果,线程同步变量a,那么线程第一次读取a的值的时候,就从进程内存中读取,否则从自己内存中读取。同理,如果线程同步变量a,每次写变量a的时候,不仅把值写入自己的内存中,也同时把值写入进程的内存中。

欢迎指正


你的意思是说,如果对共享资源变量a不做线程同步,那么各自的线程从自己内存中读?

这个显然与多线程读取共享资源,发生读脏数据的情形是矛盾的呀。

如果都从自己内存中读取的话,就不需要同步了,呵呵
23 楼 zhaspe 2010-05-31  
小弟不才,线程间通讯这个话题,我了解也不是很多,个人觉得去baidu上搜一下经典的讲解才是王道。

不过我的一个简单理解是:Java的进程有自己的内存(比如有内存存放变量a),进程创建出来的各个线程也有自己的内存(如果线程用到变量a,那么线程有单独的内存存放变量a的一个copy)。
如果,线程同步变量a,那么线程第一次读取a的值的时候,就从进程内存中读取,否则从自己内存中读取。同理,如果线程同步变量a,每次写变量a的时候,不仅把值写入自己的内存中,也同时把值写入进程的内存中。

欢迎指正
22 楼 C_J 2010-05-26  
zhaspe 写道
C_J 写道
借宝地问下。
setDeamon(boolean)
这个方法的具体作用是什么? 与no-Deamon有什么区别或者权限么?

至于为什么要多线程?

我记得书本上的解释是:当年进程切换太耗资源,系统需要保存现场,还需要内存寻址等等,而多线程共用进程资源,在进程内寻址,在做切换时容易得多,所以就有了多进程和多线程之分。

我觉得c++也应该提倡多线程而非多进程,而跟语言没关系。

另外在多CPU环境下,多线程才真正算个“多线程”,呵呵

setDaemon(boolean)用来设置线程为守护线程。
如果一个线程是守护线程,那么它创建的线程默认也是守护线程。

至于Java多线程关于锁概念和进程间通讯,我觉得看了JVM的内存实现之后,大致就会明白了


嗯,多谢你的关注。


**不过我觉得你还是没有回答我的问题。
自己google了下:
Any Java thread can be a daemon thread. Daemon threads are service providers for other threads running in the same process as the daemon thread. The run() method for a daemon thread is typically an infinite loop that waits for a service request.
When the only remaining threads in a process are daemon threads, the interpreter exits. This makes sense because when only daemon threads remain, there is no other thread for which a daemon thread can provide a service.
做过实验才明白,原来当只存在Daemon线程且没有用户线程的时候,JVM退出,以前写thread的时候还真没注意,实验如下:

public class DaemonThread extends Thread{

	public void  run(){
		while(true){
		System.out.println("I'm daemon");
		}
	}
	public static void main(String args[]){
		DaemonThread daemon=new DaemonThread();
		daemon.setDaemon(true);
		daemon.start();
	}
}

可以看到JVM很快就退出了,虽然这里是一个while(true)循环。

**关于JVM的进程间通讯,没深入了解过,不妨说说?
21 楼 zhaspe 2010-05-24  
C_J 写道
借宝地问下。
setDeamon(boolean)
这个方法的具体作用是什么? 与no-Deamon有什么区别或者权限么?

至于为什么要多线程?

我记得书本上的解释是:当年进程切换太耗资源,系统需要保存现场,还需要内存寻址等等,而多线程共用进程资源,在进程内寻址,在做切换时容易得多,所以就有了多进程和多线程之分。

我觉得c++也应该提倡多线程而非多进程,而跟语言没关系。

另外在多CPU环境下,多线程才真正算个“多线程”,呵呵

setDeamon(boolean)用来设置线程为守护线程。
如果一个线程是守护线程,那么它创建的线程默认也是守护线程。

至于Java多线程关于锁概念和进程间通讯,我觉得看了JVM的内存实现之后,大致就会明白了
20 楼 C_J 2010-05-23  
借宝地问下。
setDeamon(boolean)
这个方法的具体作用是什么? 与no-Deamon有什么区别或者权限么?

至于为什么要多线程?

我记得书本上的解释是:当年进程切换太耗资源,系统需要保存现场,还需要内存寻址等等,而多线程共用进程资源,在进程内寻址,在做切换时容易得多,所以就有了多进程和多线程之分。

我觉得c++也应该提倡多线程而非多进程,而跟语言没关系。

另外在多CPU环境下,多线程才真正算个“多线程”,呵呵
19 楼 xici_magic 2010-05-22  
自己动手去写个QQ JAVA基础就啥都明白啦。
18 楼 hellojinjie 2010-05-21  
dyllove98 写道
2、通过把线程加入ThreadGroup可以操作其他同组线程的生命

我记得现在并不提倡使用 ThreadGroup ,最多也就在讲到 UncatchExceptionHandler 的时候提到 ThreadGroup
17 楼 抛出异常的爱 2010-05-21  
dyllove98 写道
AI渣娃 写道
感觉多线程的难点在于锁的问题。


一个是锁
一个是线程之间的交流

   想处理好不容易呀,需要很多经验

现在用模拟阻塞锁所需要的经验少了很多。
16 楼 iaimstar 2010-05-21  
lirong1978 写道
线程到底有啥用啊,不就是同时执行多个任务么,不就是CPU分配时间片一会儿执行这个,一会儿执行那个,跟先把这个执行完,再执行那个有什么区别啊,谁能说下呢

中学有个文章叫 统筹方法

就是那个意思
15 楼 tianmo2008 2010-05-20  
少了个守护线程的概念,主线程死了,他所开启的守护线程也会陪葬的
14 楼 sunney2010 2010-05-20  
就这么几句话。呵呵。
13 楼 flootball 2010-05-20  
dyllove98 写道
AI渣娃 写道
感觉多线程的难点在于锁的问题。


一个是锁
一个是线程之间的交流

   想处理好不容易呀,需要很多经验

建议看看tomcat的线程池。
12 楼 dyllove98 2010-05-20  
AI渣娃 写道
感觉多线程的难点在于锁的问题。


一个是锁
一个是线程之间的交流

   想处理好不容易呀,需要很多经验
11 楼 AI渣娃 2010-05-20  
感觉多线程的难点在于锁的问题。
10 楼 mercyblitz 2010-05-20  
pjcai 写道
楼主没有听说过守护线程吗?


它意思是说,1条中,daemon线程会退出的。
9 楼 mercyblitz 2010-05-20  
dyllove98 写道
呵呵 有些程序是需要同时处理多个通道的....
c++一般采用多进程的方式~~直接fork
java的fork的话 会启动多个虚拟机进行执行~~所有采用多线程
多成成好像CPU利用率上面更好一些~~具体的就忘掉了


JDK1.2 之前采用所谓的Green Thread,不完全依赖于OS的线程调度。

后面的版本就不同了,直接利用OS或者是CPU线程调度,值得一提的是,Java线程和OS线程的映射比率是M:N(可能一对一,当M=N时)。

8 楼 mercyblitz 2010-05-20  
lirong1978 写道
线程到底有啥用啊,不就是同时执行多个任务么,不就是CPU分配时间片一会儿执行这个,一会儿执行那个,跟先把这个执行完,再执行那个有什么区别啊,谁能说下呢



你说的是并发,利用的单CPU轮询。现代意义的多线程是并行的,利用多CPU处理器,同时工作。
7 楼 lbfhappy 2010-05-20  
lirong1978 写道
线程到底有啥用啊,不就是同时执行多个任务么,不就是CPU分配时间片一会儿执行这个,一会儿执行那个,跟先把这个执行完,再执行那个有什么区别啊,谁能说下呢

因为并不是所有的线程都能很好的利用CPU,有可能有些操作会阻塞,如果顺序执行的话,那那个阻塞的方法岂不是拦着别的方法的执行,如果多线程的话,那个阻塞的方法只塞他自己的线程,别的线程照样跑。
经典的运用就是ServerSocket.accept(),一个线程一直等别人连接,另外可以起一些线程去处理连接到的socket,如果不用多线程,怎么处理的了?除非转换观念用NIO。
6 楼 dyllove98 2010-05-20  
呵呵 有些程序是需要同时处理多个通道的....
c++一般采用多进程的方式~~直接fork
java的fork的话 会启动多个虚拟机进行执行~~所有采用多线程
多成成好像CPU利用率上面更好一些~~具体的就忘掉了
5 楼 lirong1978 2010-05-20  
线程到底有啥用啊,不就是同时执行多个任务么,不就是CPU分配时间片一会儿执行这个,一会儿执行那个,跟先把这个执行完,再执行那个有什么区别啊,谁能说下呢

相关推荐

    Java多线程知识点总结

    该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

    Java多线程小结

    Java中多线程的学习的自我小结,有多线程的意思,多线程常见的控制方法等内容

    Java 多线程学习总结归纳(附代码)

    这是本人在学习Java 多线程时的总结归纳以及代码,希望对下载的同学有帮助!

    Java_多线程与并发编程总结.doc

    对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同...

    Java多线程编程总结

    要认识多线程就要从操作系统的原理说起。以前古老的DOS操作系统(V6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在copy东西的时候不能rename文件名。为了提高系统的利用效率,采用批处理来...

    Java线程学习和总结

    NULL 博文链接:https://ralf-realman.iteye.com/blog/417416

    Java多线程yield心得分享

    前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案例总结了一下

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP...

    多线程实验报告.docx

    编写一多线程程序,实现如下功能: (1)一个线程进行阶乘和的运算(1!+2!+3!……+30!), 每次阶乘计算时间随机间隔0.5-1秒; (2)另一个线程每隔1秒时间读取上个线程的运算结果和计算 进程,并在图形界面中...

    Spring 异步多线程动态任务处理的使用心得

    NULL 博文链接:https://dave-2009.iteye.com/blog/769637

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP...

    Java 同步锁 wait notify 学习心得

    java多线程下wait和notify的作用

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    飞机大战_MoAC

    java多线程实现飞机大战,java创建多线程原理,键盘监听器、按钮监听器

    java多线程中测试同步的小程序

    这是我做的一个很简单的多线程同步程序,目的是为了测试多线程编程下如何使用同步(synchronized)防止产生竞争共享资源的错误状态,从中得到的心得是:一定要将你所共享的变量封装在一个类中,将所有有关该变量的...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    cc_to_sever.zip

    java多线程socket通信、java网络编程学习心得,基本实现多线程通信,其他问题的欢饮反馈。应付作业有余了: 应用多线程实现服务器与多客户端之间的通信: ① 服务器端创建ServerSocket,循环调用accept()等待客户端...

    关于Java面试题、笔记的分享.zip

    Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等...

    张孝祥Java就业培训教程.pdf

    在以后的章节中,用通俗易懂的手法,紧密联系实际应用的方式,深入浅出地讲解了多线程,常用Java类,Java中的I/O(输入输出)编程,GUI与Applet,网络编程等方面的知识。 本书许多内容都来源于程序员圈子里的非正式...

Global site tag (gtag.js) - Google Analytics