线程的概述 | |||||||
进程: | 代表了内存中的执行区域,负责了这个程序的内存空间分配 | ||||||
线程: | 一个进程中负责一个执行路径 | ||||||
CPU的分时机制,循环获得自己的CPU时间片。 | |||||||
多线程的好处: | |||||||
1 | 解决了一个进程里面可以同时运行多个任务,多个执行路径 | ||||||
2 | 提供资源的利用率,而不是提供效率 | ||||||
弊端: | 1 | 降低了一个进程里面的线程执行频率 | |||||
2 | 对线程进行管理需要额外的CPU开销,会给系统上下文切换带来额外的负担 | ||||||
3 | 共有变量同时读写,会造成线程安全问题 | ||||||
4 | 线程的死锁。较长时间的等待或资源竞争等 | ||||||
创建多线程 | 一 | ||||||
1 | 继承Thread类 | ||||||
2 | 然后复写里面的run()方法 | ||||||
3 | 调用父类的start()方法启动线程 | ||||||
常见线程的方法 | |||||||
Thread(String name) | 初始化线程的名字 | ||||||
getName() | 返回线程的名字 | ||||||
setName(String name) | 设置线程对象名 | ||||||
sleep() | 线程睡眠的毫秒数 | ||||||
getPriority() | 线程的优先级别,默认为5 | ||||||
setPriority(int newPriority) | 设置线程的优先级 最大为10,最小为1 | ||||||
currentThread | 返回cpu正在执行的线程对象 | ||||||
二 | 定义一个类,继承Runnable接口 | ||||||
然后将该对象实例化后的对象传给Thread构造函数 | |||||||
因为Thread继承自Runnable,会调用run()方法 | |||||||
锁对象 | 防止出现死锁 | ||||||
线程间的通信 | 多个线程操作同一个资源 | ||||||
生产者和消费者 | |||||||
实现方法 | java通过Object类的wait,notify,notifyAll 来实现线程间的同信 | ||||||
wait | 告诉当前线程放弃执行权,放弃监视器(锁),进入阻塞状态 | ||||||
知道其他对象调用notify为止 | |||||||
notify | 唤醒等待的线程 | ||||||
notifyAll | 唤醒同一监视器中调用wait的所有的线程 | ||||||
wait是Object的方法 | |||||||
sleep是Thread的方法 | |||||||
stop方法已经过时 | 使用标记来停止线程 | ||||||
JoinThread jt = new JoinThread(); | |||||||
Thread th = new Thread(jt, "one"); | |||||||
th.start(); | |||||||
one线程不执行完,主线程会一直等待 |
多线程
最新推荐文章于 2023-12-17 14:55:45 发布