JUC八股
ps 我讨厌八股线程的基础认识线程和进程的区别当一个程序被运行从磁盘加载这个程序的代码至内存这时就开启了一个进程。一个线程就是一个指令流将指令流中的一条条指令以一定的顺序交给 CPU 执行 一个进程之内可以分为一到多个线程。进程是正在运行程序的实例进程中包含了线程每个线程执行不同的任务 不同的进程使用不同的内存空间在当前进程下的所有线程可以共享内存空间 线程更轻量线程上下文切换成本一般上要比进程上下文切换低(上下文切换指的是从一个线程切换到另一个线程)并行和并发有什么区别现在都是多核CPU在多核CPU下并发是同一时间应对多件事情的能力多个线程轮流使用一个或多个CPU 宏观并行微观串行并行是同一时间动手做多件事情的能力4核CPU同时执行4个线程创建线程的方式有哪些共有四种方式可以创建线程分别是继承Thread类实现runnable接口实现Callable接口线程池创建线程本质都是c vative开辟线程runnable类似于任务runnable 和 callable 有什么区别Runnable 接口run方法没有返回值Callable接口call方法有返回值是个泛型和Future、FutureTask配合可以用来获取异步执行的结果 Callable接口的call()方法允许抛出异常而Runnable接口的run()方法的异常只能在内部消化不能继续上抛线程的 run()和 start()有什么区别start(): 用来启动线程通过该线程调用run方法执行run方法中所定义的逻辑代码。start方法只能被调用一次。 run(): 封装了要被线程执行的代码可以被调用多次。线程包括哪些状态状态之间是如何变化的非常之抽象啊新建 T1、T2、T3 三个线程如何保证它们按顺序执行joinnotify()和 notifyAll()有什么区别wait随机一个全部有可以指定打断的java中wait和sleep方法的不同状态不同等待和记时等待 释放锁一个不释放wait如何停止一个正在运行的线程stop正常线程检测打断标准如果存在打断退出线程中的并发安全SynchronizedSynchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】其它线程再想获取这个【对象锁】时就会阻塞住Monitor一个是阻塞一个是等待i锁升级偏向锁线程记录轻量级 cas 自旋锁重量 阻塞等待对象内容结构轻量级锁也可以是自身的地址重量级锁每个 Java 对象都可以关联一个 Monitor 对象如果使用 synchronized 给对象上锁重量级之后该对象头的Mark Word 中就被设置指向 Monitor 对象的指针轻量级锁在很多的情况下在Java程序运行时同步块中的代码都是不存在竞争的不同的线程交替的执行同步块中的代码。这种情况下用重量级锁是没必要的。因此JVM引入了轻量级锁的概念。偏向锁轻量级锁在没有竞争时就自己这个线程每次重入仍然需要执行 CAS 操作。 Java 6 中引入了偏向锁来做进一步优化只有第一次使用 CAS 将线程 ID 设置到对象的 Mark Word 头之后发现 这个线程 ID 是自己的就表示没有竞争不用重新 CAS。以后只要不发生竞争这个对象就归该线程所有锁升级总结你谈谈 JMMJava内存模型
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444820.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!