【Java学习笔记】线程学习笔记
2012-01-15 07:26
387 查看
======================================================
注:本文源代码点此下载
======================================================
一、资源
http://blog.csdn.net/axman/article/details/431796
这个博客里有java多线程、线程池的一系列,从基础开始就很清楚,牛人
二、重点
今天读到了基础篇(三),跳过了后面的方法介绍,以后估计还得补上来的....
做笔记......
1、线程对象和线程
线程对象:一个object类,线程执行形式的封装
线程:真正执行的那什么..
2、jvm到底做了什么?
" jvm进程被启动,在同一个jvm进程中,有且只有一个进程,就是它自己.然后在这个jvm环境中,
所有程序的运行都是以线程来运行.jvm最先会产生一个主线程,由它来运行指定程序的入口点.在这个
程序中,就是主线程从main方法开始运行.当main方法结束后,主线程运行完成.jvm进程也随之退出.
我们看到的是一个主线程在运行main方法,这样的只有一个线程执行程序逻辑的流程我们称
之为单线程.这是jvm提供给我们的单线程环境,事实上,jvm底层还至少有垃圾回收这样的后台线程以
及其它非java线程,但这些线程结我们而言不可访问,我们只认为它是单线程的."
3、并行和并发
并行:单cpu中,通过调度在线程直接切换
并发:多cpu中,同时让两个以上线程同时运行
疑惑1:我的理解:单行时其实某一时间点上只有一个线程在跑?
疑惑2:我的理解:等于某个时间点可以有多个线程跑?那系统的进程和线程是什么关系?一个进程类似于一个程序的运行空间,而线程则是进程里的某些任务的执行通道?
4、thread.start()
你只要调用start()方法,jvm就会管理这个线程对象让它产生一个线程并注册到线程处理系统中(线程栈).
start()方法最本质的功能是从cpu中申请另一个线程空间来执行run()方法中的代码,它和当前的线程是
两条线,在相对独立的线程空间运行,也就是说,如果你直接调用线程对象的run()方法,当然也会执行,但
那是在当前线程中执行,run()方法执行完成后继续执行下面的代码.而调用start()方法后,run()方法的
代码会和当前线程并发(单cpu)或并行(多cpu)执行.
一个thread的实例一旦调用start()方法,这个实例的started标记就标记为true,事实中不管这个线程
后来有没有执行到底,只要调用了一次start()就再也没有机会运行了,这意味着:
[通过thread实例的start(),一个thread的实例只能产生一个线程]
public synchronized void start() {
if (started)
throw new illegalthreadstateexception();
started = true;
group.add(this);
start0();
}
5、thread(new runanle()).start()
一个runnable实例给thread对象多次包装,我们就可以看到它们实际是在同一实例上启动线程
例子在资源博客http://blog.csdn.net/axman/article/details/420892中
我的理解:
这里很奇怪我觉得,
r r = new r();
for(int i=0;i
虽然每次都是 new thread(r).start(),但是按照博客的说法,应该是在一个线程,那这说明了线程对象和线程的区别,每次新建的线程对象肯定是不一样的,但是他们启动的线程是一样的,是这样理解的么?
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
注:本文源代码点此下载
======================================================
一、资源
http://blog.csdn.net/axman/article/details/431796
这个博客里有java多线程、线程池的一系列,从基础开始就很清楚,牛人
二、重点
今天读到了基础篇(三),跳过了后面的方法介绍,以后估计还得补上来的....
做笔记......
1、线程对象和线程
线程对象:一个object类,线程执行形式的封装
线程:真正执行的那什么..
2、jvm到底做了什么?
" jvm进程被启动,在同一个jvm进程中,有且只有一个进程,就是它自己.然后在这个jvm环境中,
所有程序的运行都是以线程来运行.jvm最先会产生一个主线程,由它来运行指定程序的入口点.在这个
程序中,就是主线程从main方法开始运行.当main方法结束后,主线程运行完成.jvm进程也随之退出.
我们看到的是一个主线程在运行main方法,这样的只有一个线程执行程序逻辑的流程我们称
之为单线程.这是jvm提供给我们的单线程环境,事实上,jvm底层还至少有垃圾回收这样的后台线程以
及其它非java线程,但这些线程结我们而言不可访问,我们只认为它是单线程的."
3、并行和并发
并行:单cpu中,通过调度在线程直接切换
并发:多cpu中,同时让两个以上线程同时运行
疑惑1:我的理解:单行时其实某一时间点上只有一个线程在跑?
疑惑2:我的理解:等于某个时间点可以有多个线程跑?那系统的进程和线程是什么关系?一个进程类似于一个程序的运行空间,而线程则是进程里的某些任务的执行通道?
4、thread.start()
你只要调用start()方法,jvm就会管理这个线程对象让它产生一个线程并注册到线程处理系统中(线程栈).
start()方法最本质的功能是从cpu中申请另一个线程空间来执行run()方法中的代码,它和当前的线程是
两条线,在相对独立的线程空间运行,也就是说,如果你直接调用线程对象的run()方法,当然也会执行,但
那是在当前线程中执行,run()方法执行完成后继续执行下面的代码.而调用start()方法后,run()方法的
代码会和当前线程并发(单cpu)或并行(多cpu)执行.
一个thread的实例一旦调用start()方法,这个实例的started标记就标记为true,事实中不管这个线程
后来有没有执行到底,只要调用了一次start()就再也没有机会运行了,这意味着:
[通过thread实例的start(),一个thread的实例只能产生一个线程]
public synchronized void start() {
if (started)
throw new illegalthreadstateexception();
started = true;
group.add(this);
start0();
}
5、thread(new runanle()).start()
一个runnable实例给thread对象多次包装,我们就可以看到它们实际是在同一实例上启动线程
例子在资源博客http://blog.csdn.net/axman/article/details/420892中
我的理解:
这里很奇怪我觉得,
r r = new r();
for(int i=0;i
虽然每次都是 new thread(r).start(),但是按照博客的说法,应该是在一个线程,那这说明了线程对象和线程的区别,每次新建的线程对象肯定是不一样的,但是他们启动的线程是一样的,是这样理解的么?
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
相关文章推荐
- java 多线程学习笔记之 线程中断
- 学习笔记 java多线程(四)线程间协作
- Java线程学习笔记之Executor
- Java学习笔记之线程(四):线程的死锁现象
- 【java学习笔记】线程
- 第九章线程 --- java学习笔记
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
- Java线程学习笔记之BlockingQueue阻塞队列
- Java线程学习笔记之线程局部变量
- Android(java)学习笔记70:同步中的死锁问题以及线程通信问题
- java struts2学习笔记之线程安全
- 学习笔记-java线程
- [知了堂学习笔记]_Java中线程的学习(二)
- Java网络编程学习笔记(三)线程
- 黑马程序员--Java学习笔记之多线程(自定义线程的两种方式对比、线程状态、线程安全)
- 黑马程序员 Java基础学习笔记 线程间同信
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- 张孝祥java.concurrent线程并发学习笔记 - concurrent简介
- Java学习笔记之线程间的通信
- 学习笔记2:java中Thread类与线程的创建