标签:虚拟 cpu 类型 代码块 ges 不同 存在 单元 obb
多线程:
实现同时执行的效果,实际上是多个线程在争抢CPU
可以实现不同功能的同时执行
多线程不一定能够提高效率,但是可以合理的使用PCU资源
多线程的运行结果是不同的,因为线程在争抢CPU,这就是多线程的随机性
概念:
进程(Process):
每一个应用程序都会对应一个进程
正在运行的程序,也就是在内存中开辟的内存空间
线程(Thread):
负责程序执行的一条执行路径,也称为一个执行单元
进程的执行实际上是线程在执行
一个进程至少会有一个线程(Main Thread),主线程执行main函数代码
当一个进程中有多个线程时,就是多线程程序
任务(Task):
每个线程需要执行的代码
任务代码都有其存储位置
主线程的任务代码在main函数,垃圾回收线程的任务代码在finalize函数中
线程是随着任务的存在而存在,随着任务的结束而消失
/**
*
* JVM(Java 虚拟机)是不是多线程?
*
* 至少有一个负责正常执行的线程,也就是执行main函数中的代码----主线程
* 还有一个负责垃圾回收的线程,也就是执行finalize函数中的代码----垃圾回收线程
*
* **每个对象都可以被回收,回收的功能定义在Object的finalize()方法中
* **运行垃圾回收器,调用System的gc()方法
*
**/
创建线程的第一种方式:
1 创建一个类继承Thread
2 重写Thread类中的run方法
创建线程是为了执行任务
任务代码必须有存储位置,run方法就是任务代码的存储位置
3 创建子类对象,实际在创建线程
4 启动线程
主线程的任务代码在main函数中
子线程的任务代码在run函数中
**run()方法只是一个普通的方法调用,不具备启动线程的功能
**start()方法会启动线程并执行run()中的代码
**currentThread()方法返回当前的线程对象
/**
*
* 为什么不能直接创建Thread类,然后调用start方法?
*
* 任务代码必须写在run方法中,而Thread类中的run方法没有实现任何功能,代码执行没有结果
* 所以只有继承Thread类,重写run方法
*
**/
多线程内存:
在栈中为主线程开辟内存
多线程不遵循先进后出,每个线程在栈中都有内存,谁先获得CPU,就先执行
当线程执行完自己的任务代码,线程就从栈中消失
只有所有线程都结束,整个进程才结束
创建线程的第二种方式:
为了解决临界资源的问题,需要使用创建线程的第二种方式
1 创建实现了Runnable接口的子类
2 重写Runnable接口的run方法
3 创建实现了Runnable接口的子类的对西航
4 创建Thread类的对象,也就是创建线程
5 把实现了Runnable忌口的子类对象作为参数传递给Thread的构造方法
**把线程任务进行了描述,也就是面向对象
**实现了线程任务和线程对象的分离,线程执行什么任务不再重要,只要实现了Runnable接口的子类对象都可以作为参数传递给Thread的构造方法
**实现了接口的同时还可以继承父类
线程的生命周期:
/**
*
* 为什么创建线程的第二种方式可以解决卖票问题?
*
* 第一种创建线程的方式:线程和线程任务是绑定在一起的,创建4个线程就创建了4份资源
* 第二种创建线程的方式:线程和线程任务进行了分离,只需要创建一个任务,让4个线程分别去执行
*
**/
synchronized代码块的锁:obj
同步函数的锁:this
静态同步函数:
静态函数进内存的时候不存在对象,但是存在其所属类的字节码文件,属于Class类型的对象,所以静态同步函数的锁是其所属类的字节码文件对象
避免死锁:
容易发生在锁的嵌套
线程间的通信:
线程间的任务不同,但是线程操作的数据相同
有共享数据
操作共享数据的代码超过一句
等待唤醒机制:
wait() notify() notifyAll()
必须用在同步中,因为同步中才有锁
指明让持有锁的线程去等待或被唤醒
等待的线程会放弃锁
**sleep()方法使线程进入挂起(冻结),人为
**wait()方法进入等待状态,将线程放入线程池
**notify()方法唤醒线程池中的任意一个线程,允许空唤醒,即没有要唤醒的对象
**notifyAll()方法唤醒所有线程
/**
*
* wait(),notify(),notifyAall()为什么定义在Object中?
*
* wait(),notify(),notifyAall()必须用在同步中,因为同步中才有锁
* 锁是任意对象,任意对象都可以调用的方法需要定义在Obbject中
*
**/
标签:虚拟 cpu 类型 代码块 ges 不同 存在 单元 obb
原文地址:http://www.cnblogs.com/roxy/p/7290497.html