A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张书成 初级黑马   /  2019-5-13 14:54  /  736 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  线程
进程:是正在运行的程序
线程:是进程中的单个控制流,是一条执行路径;
单线程:一个进程只有一个执行路径,以前用的main方法
多进程:一个进程有多条执行路径
实现多进程的方法
1.继承Thread类;
1-1实现步骤
1.1定义一个类MyThread继承Thread类
1.2在MyThread类中重写run()方法
1.3创建MyThread类的对象
启动线程
1-2
两个小问题
- 为什么要重写run()方法?
因为run()是用来封装被线程执行的代码
run()方法和start()方法的区别?
  run():封装线程执行的代码,直接调用,相当于普通方法的调用
start():启动线程;然后由JVM调用此线程的run()方法
1-3设置和获取线程名称
void  setName(String name):将此线程的名称更改为等于参数name
String  getName():返回此线程的名称
Thread  currentThread():返回对当前正在执行的线程对象的引用
1-4线程优先级
1.4线程调度
两种调度方式
  分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片
  抢占式调度模型:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些
Java使用的是抢占式调度模型
随机性:假如计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的
final int getPriority()
返回此线程的优先级
final void setPriority(int newPriority)更改此线程的优先级
主机的优先级是Thread .currentThread.getPriority()                           
线程默认优先级是5;线程优先级的范围是:1-10
1-5线程控制
static void sleep(long millis)
使当前正在执行的线程停留(暂停执行)指定的毫秒数
void join()
等待这个线程死亡 写在第一个位置否则join会失去作用
void setDaemon(boolean on)
将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出
1-6线程的生命周期
新建- start()-》就绪《----有执行资格没执行权--《(阻塞)《----》运行--有执行资格有执行权-》死亡
2.实现Runnable接口
2-1---Thread(Runnable target)
分配一个新的Thread对象
Thread(Runnable target, String name)
分配一个新的Thread对象
2.2实现步骤
定义一个类MyRunnable实现Runnable接口
在MyRunnable类中重写run()方法
创建MyRunnable类的对象
创建Thread类的对象,把MyRunnable对象作为构造方法的参数
启动线程
2-3 多线程的实现方案有两种
继承Thread类
实现Runnable接口
2-3-1相比继承Thread类,实现Runnable接口的好处
避免了Java单继承的局限性
适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好的体现了面向对象的设计思想
2.4同步代码块解决数据安全问题
安全问题出现的条件
是多线程环境
有共享数据
有多条语句操作共享数据
  • 进程线程的概念
    • 进程:把正在运行应用程序
    • 线程:    就一个执行路径

  • 实现多线程的方式
    • 继承 Thread  重写 run    启动 start()
    • 实现  Runnable  重写 run     Thread t1 = new Thread(my,"高铁");  t1.start()

  • 设置和获取线程名称的方法
    • 设置名称: 1.  setName("名称")     2.new Thread("名称")
    • 获取名称:  1.  getName()               2. Thread.currentThread.getName()

  • 线程优先级
    • 设置优先级:setPriority(1-10)
    • 获取优先级:getPriority()
    • 优先级的范围:1-10    Thread.MIN_PRIORITY 1 Thread.NORM_PRIORITY 5 Thread.MAX_PRIORITY10
    • 默认优先级:5

  • 线程控制方法
    • 休眠:sleep(1000)
    • 等待线程死亡:join()
    • 守护线程:setDaemon(true)       垃圾回收线程

  • 线程的五种状态
    • 新建
    • 就绪
    • 运行
    • 死亡
    • 阻塞

  • 同步方法和同步块
    • synchronized (obj){}
    • 同步方法:synchronized
    • 非静态同步方法的锁:this   静态同步方法的锁是类名.class

  • 同步方法举例
    • StringBuffer和StringBuilder
    • Vector和ArrayList
    • HashTable和HashMap
    • Colllections.synchronizedList()  Colllections.synchronizedSet()  Colllections.synchronizedMap()

    • Lock l=new ReentrantLock();    l.lock()   l.unlock();

  • wait(),notify()含义
    • 线程等待:wait()
    • 线程唤醒:notify()








0 个回复

您需要登录后才可以回帖 登录 | 加入黑马