黑马程序员技术交流社区

标题: 线程的知识点1 [打印本页]

作者: 赵哲成    时间: 2014-8-24 22:02
标题: 线程的知识点1
进程:正在进行的程序。封装控制单元
线程:程序中的执行路径。线程在控制进程的执行。
一个线程只少有一个线程。

java Vm 启动时会有一个进程java,exe

该进程中至少有一个线程负责java程序的执行
而且这个线程运行的代码存在于main方法中,
该线程称之为主线程。


start() 1.启动线程  2.调用run方法
为什么要覆盖run方法?
thread类用于描述线程
该类就定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法
run方法用于存储线程需要运行的代码


被创建  ------> 运行 -------> 冻结
        start()       sleep(time)
                     <-------
                       notify()唤醒
                      ------->
                      wait()
stop()结束线程
sleep()---->放弃执行资格   被唤醒后先到阻塞状态,等待运行
wait()----> 放弃执行资格   被唤醒后先到阻塞状态,等待运行


默认名称
Thread-0
Thread-1

currentThread();获取当前线程对象
getName():获取线程名称


实现runnable接口创建线程
1.定义类实现runnable接口
2.覆盖run方法
3.通过thread类建立对象
4.将子类对象作为实际参数传递给构造函数
5.调用start方法启动线程




多线程安全问题

        当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行一部分
还没执行完,另一个线程参与

解决办法,
让一个线程执行完,才能让另一个线程执行

同步代码块

Object obj = new Object();
synchronized(obj){

}

同步的前提
1.必须要有两个或者以上的线程。
2.必须多个线程使用同一个锁

必须保证同步中只有一个线程在运行

同步函数的锁是this
静态同步函数的锁是class对象类(类名.class)



作者: zuochbd    时间: 2014-8-24 23:04
线程:程序中的执行路径。线程在控制进程的执行。
一个线程只少有一个线程。
-------------------------
这两句话有问题的.
为什么会有线程这个东西?
不同进程的内存空间是相互独立的;
但有时, 我们一个程序要并发运行几个进程,
这时进程之间进行切换时, CPU要先把前一个进程的资源保存好后, 然后再把后一个进程的资源调出来.
这样很浪费效率.
所以, 后来推出线程. 让一个进程可以有几个线程, 这些线程共享这个进程的资源.
这样, 线程进行切换时, OS不用去做很多工作.
曾经有人称"线程"为"轻量级进程".

不同的系统对线程的管理是不一样, 通常有三种.
一种是内核级线程, 一种是用户级线程, 一种是上述两种的混合形式.
JVM的线程管理是直接由JVM来控制的, 而不受OS控制. 这种叫做"用户级线程"

作者: liqiaohui    时间: 2014-8-24 23:18
楼上的详细解释了线程出现的缘由




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2