锁定老帖子 主题:关于java多线程一些心得
精华帖 (2) :: 良好帖 (1) :: 新手帖 (19) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-23
最后修改:2010-05-23
借宝地问下。
setDeamon(boolean) 这个方法的具体作用是什么? 与no-Deamon有什么区别或者权限么? 至于为什么要多线程? 我记得书本上的解释是:当年进程切换太耗资源,系统需要保存现场,还需要内存寻址等等,而多线程共用进程资源,在进程内寻址,在做切换时容易得多,所以就有了多进程和多线程之分。 我觉得c++也应该提倡多线程而非多进程,而跟语言没关系。 另外在多CPU环境下,多线程才真正算个“多线程”,呵呵 |
|
返回顶楼 | |
发表时间:2010-05-24
C_J 写道 借宝地问下。
setDeamon(boolean) 这个方法的具体作用是什么? 与no-Deamon有什么区别或者权限么? 至于为什么要多线程? 我记得书本上的解释是:当年进程切换太耗资源,系统需要保存现场,还需要内存寻址等等,而多线程共用进程资源,在进程内寻址,在做切换时容易得多,所以就有了多进程和多线程之分。 我觉得c++也应该提倡多线程而非多进程,而跟语言没关系。 另外在多CPU环境下,多线程才真正算个“多线程”,呵呵 setDeamon(boolean)用来设置线程为守护线程。 如果一个线程是守护线程,那么它创建的线程默认也是守护线程。 至于Java多线程关于锁概念和进程间通讯,我觉得看了JVM的内存实现之后,大致就会明白了 |
|
返回顶楼 | |
发表时间:2010-05-26
最后修改:2010-05-27
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的进程间通讯,没深入了解过,不妨说说? |
|
返回顶楼 | |
发表时间:2010-05-31
小弟不才,线程间通讯这个话题,我了解也不是很多,个人觉得去baidu上搜一下经典的讲解才是王道。
不过我的一个简单理解是:Java的进程有自己的内存(比如有内存存放变量a),进程创建出来的各个线程也有自己的内存(如果线程用到变量a,那么线程有单独的内存存放变量a的一个copy)。 如果,线程同步变量a,那么线程第一次读取a的值的时候,就从进程内存中读取,否则从自己内存中读取。同理,如果线程同步变量a,每次写变量a的时候,不仅把值写入自己的内存中,也同时把值写入进程的内存中。 欢迎指正 |
|
返回顶楼 | |
发表时间:2010-05-31
zhaspe 写道 如果,线程同步变量a,那么线程第一次读取a的值的时候,就从进程内存中读取,否则从自己内存中读取。同理,如果线程同步变量a,每次写变量a的时候,不仅把值写入自己的内存中,也同时把值写入进程的内存中。 欢迎指正 你的意思是说,如果对共享资源变量a不做线程同步,那么各自的线程从自己内存中读? 这个显然与多线程读取共享资源,发生读脏数据的情形是矛盾的呀。 如果都从自己内存中读取的话,就不需要同步了,呵呵 |
|
返回顶楼 | |