Java高级--学习(1)

面试问题:

2020-11-23到2020-11-30
程序:为了完成特点任务,用某种语言编写的一组指令的集合。即一段静态的代码。
进程:正在运行的一个程序
进程可进一步细化为线程,是一个程序内部的一条执行路径。
每个线程拥有独立的运行栈和程序计数器
多个线程,共享同一个进程中的结果:方法区和堆。
单核CPU:假的多线程
java.exe至少有三个线程: main() gc()垃圾回收线程 处理异常线程
并行:多个CPU同时执行多个任务
并发:一个CPU同时(看似同时)执行多个任务
解决线程安全问题是? 3种方法。
创建线程? 4种方式。

线程

创建线程
继承于thread类 声明Thread类的子类,重写Thread类中的run方法 ;create 一个子类对象,用对象调用start方法
注两个问题:不调用start方法只调用run方法不能启动多线程
启动线程后,如何再启动一个线程?
new一个新对象 t2.start在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
比较创建线程的两种方式:
(继承具有局限性;java单继承机制
开发中:优先选择:实现Runnable接口的方式
原因 1. 实现的方式没有类的单继承性的局限性。
2.实现的方式更适合来处理多个线程有共享数据的情况。
联系:Thread类中也有Runnable

421测试线程中的常用方法:

  1. start(): 启动当前线程,调用当前线程的run()
  2. run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中。
  3. currentThread(): 静态方法 返回当前代码执行的线程
  4. getName(): 获取当前线程的名
  5. setName(): 设置当前线程名(start之前)
  6. yield(): 释放当前CPU的执行权
  7. join(): 在线程A中调用线程B的join方法,此时线程A进入阻塞状态,直到线程B完成执行后,线程B才结束阻塞状态
  8. sleep(long millis time) 让当前线程睡眠,指定的毫秒,在毫秒时间内 当前线程为阻塞状态。应用于倒计时
  9. isAlive(): 判断线程是否存活。

线程的调度:高优先级的线程抢占CPU

1.getpriority() 获取线程
2. setpriority():设置线程优先级(优先级高并不一定先执行)

线程的通信:wait() / notify() / notifyall(): 次三方法定义在Object类中。
JAVA中的线程分为两类?: 一种是守护线程(依赖于用户线程),一种是用户线程(主线程)

线程的生命周期
新建;调用start方法后进入就绪;
就绪;获取CPU执行权之后进入运行;
运行;失去CPU执行权或Yield()进入就绪;
阻塞;不是线程的最终状态;
死亡;运行到死亡–》执行完run(), stop();出现错误和异常且没处理;在这里插入图片描述
线程的同步:
多个线程执行的不确定性会引起执行结果的不稳定;
多个线程对数据库的共享,会造成操作的不完整性,会破坏数据
安全问题的出现就是因为共享数据;
问题:例如卖票系统中出现了重票,错票的现象;
当某个线程操作时,还没完成时,另一个操作参与进来也进行操作。
如何解决:当一个线程A在操作时,其他线程不能参与进来,直到线程A操作完,其他线程才可以操作,即使线程A被阻塞,也不能被改变。433

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值