关于java多线程一些心得 - Java综合 - Java - ITeye论坛(转载)
来源:互联网 发布:php transaction 编辑:程序博客网 时间:2024/05/01 10:22
1、主线程死掉之后 ,所有在主线程上启动的线程并不会死掉
2、通过把线程加入ThreadGroup可以操作其他同组线程的生命
3、如果想在子线程中杀掉主线程,直接把主线程的Thread的传入子线程即可
4、要想关闭多线程程序,需要把当前所有的线程全部杀死才能关闭
5、各个线程互补影响~父子线程也不会有影响
When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:
* The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.
* All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.
c++一般采用多进程的方式~~直接fork
java的fork的话 会启动多个虚拟机进行执行~~所有采用多线程
多成成好像CPU利用率上面更好一些~~具体的就忘掉了
因为并不是所有的线程都能很好的利用CPU,有可能有些操作会阻塞,如果顺序执行的话,那那个阻塞的方法岂不是拦着别的方法的执行,如果多线程的话,那个阻塞的方法只塞他自己的线程,别的线程照样跑。
经典的运用就是ServerSocket.accept(),一个线程一直等别人连接,另外可以起一些线程去处理连接到的socket,如果不用多线程,怎么处理的了?除非转换观念用NIO。
你说的是并发,利用的单CPU轮询。现代意义的多线程是并行的,利用多CPU处理器,同时工作。
c++一般采用多进程的方式~~直接fork
java的fork的话 会启动多个虚拟机进行执行~~所有采用多线程
多成成好像CPU利用率上面更好一些~~具体的就忘掉了
JDK1.2 之前采用所谓的Green Thread,不完全依赖于OS的线程调度。
后面的版本就不同了,直接利用OS或者是CPU线程调度,值得一提的是,Java线程和OS线程的映射比率是M:N(可能一对一,当M=N时)。
借宝地问下。
setDeamon(boolean)
这个方法的具体作用是什么? 与no-Deamon有什么区别或者权限么?
至于为什么要多线程?
我记得书本上的解释是:当年进程切换太耗资源,系统需要保存现场,还需要内存寻址等等,而多线程共用进程资源,在进程内寻址,在做切换时容易得多,所以就有了多进程和多线程之分。
我觉得c++也应该提倡多线程而非多进程,而跟语言没关系。
另外在多CPU环境下,多线程才真正算个“多线程”,呵呵
setDeamon(boolean)用来设置线程为守护线程。
如果一个线程是守护线程,那么它创建的线程默认也是守护线程。
自己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的时候还真没注意,实验如下:
- 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的进程间通讯,没深入了解过,不妨说说?
至于Java多线程关于锁概念和进程间通讯,我觉得看了JVM的内存实现之后,大致就会明白了
不过我的一个简单理解是:Java的进程有自己的内存(比如有内存存放变量a),进程创建出来的各个线程也有自己的内存(如果线程用到变量a,那么线程有单独的内存存放变量a的一个copy)。
如果,线程同步变量a,那么线程第一次读取a的值的时候,就从进程内存中读取,否则从自己内存中读取。同理,如果线程同步变量a,每次写变量a的时候,不仅把值写入自己的内存中,也同时把值写入进程的内存中。
欢迎指正
如果,线程同步变量a,那么线程第一次读取a的值的时候,就从进程内存中读取,否则从自己内存中读取。同理,如果线程同步变量a,每次写变量a的时候,不仅把值写入自己的内存中,也同时把值写入进程的内存中。
欢迎指正
你的意思是说,如果对共享资源变量a不做线程同步,那么各自的线程从自己内存中读?
这个显然与多线程读取共享资源,发生读脏数据的情形是矛盾的呀。
如果都从自己内存中读取的话,就不需要同步了,呵呵
- 关于java多线程一些心得 - Java综合 - Java - ITeye论坛(转载)
- java中如何实现多进程并发?注意不是多线程 - ITeye问答(转载)
- Java动态代理机制详解-转自ITEYE论坛
- 关于Java的一些学习方法心得
- 关于自学java的一些心得
- 关于一些Java开发工具的使用心得(不断更新)
- Java多线程Synchronized心得
- Java多线程Synchronized心得
- Java多线程Synchronized心得
- 关于Java Servlet多线程机制(转载)
- JAVA多线程同步(转载)
- java垃圾回收--转载http://qiang106.iteye.com/blog/571182
- 关于java多线程的一些知识
- 关于学习java多线程的一些感想
- java 多线程 http://heipark.iteye.com/blog/1156011
- Java多线程详解--转载
- java多线程复习转载
- 【转载】java多线程调度
- div自动居高(兼容FF)
- Ruby学习一 基础
- Oracle查询重复记录,分页和去掉重复数据的查询语句
- struts2 文件上传大小的限制(转载)
- How to deal with International trade outsourcing?
- 关于java多线程一些心得 - Java综合 - Java - ITeye论坛(转载)
- DWR3.0+Spring2.5实现Comet服务器到浏览器的消息推送
- Sendip使用说明
- document 和 window.document
- 让你的Android程序兼容多种分辨率
- response.setHeader()下载中文文件名乱码问题
- java中如何实现多进程并发?注意不是多线程 - ITeye问答(转载)
- 开源分布式文件系统CEPH调研
- Dwrite