zoukankan      html  css  js  c++  java
  • 并发基础

    1、程序计数器为什么是私有的 ?
        作用:在多线程环境的情况下,程序计数器用于记录当前线程执行的位置,从而当线程切换回来的时候能够知道该线程上次运行到哪儿了。
        所以,程序计数器私有主要是为了 线程切换后能恢复到正确的执行位置。
    2、虚拟机栈和本地方法栈为什么是私有的?
        每个java方法执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。
        虚拟机栈为 虚拟机执行java方法(也就是字节码)服务,
        本地方法栈 虚拟机使用到的native方法服务
        所以,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈是线程私有的。
    3、一句话简单了解堆和方法区
        堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象(所有对象都在这里分配内存),
       方法区主要用于存放已被加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
    4、说说sleep()和wait()区别和共同点?
         两者最主要的区别在于:sleep方法没有释放锁,而wait方法释放了锁。
         两者都可以暂停线程的执行
         wait通常被用于线程间交互/通信,sleep通用用于暂停执行
         wait方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify或者notifyAll方法。
    sleep方法执行完成后,线程自动苏醒。或者可以使用wait(long timeout)超时后线程会自动苏醒
    5、我们调用start()方法时会执行run()方法,为什么我们不能直接调用run方法?
        new一个Thread,线程处于新建状态,调用start()方法,线程将处于就绪状态,当分配到cpu时间片时,线程将处于运行状态。start()会执行线程的相应准备工作,
       然后自动执行run()方法,这是真正的多线程工作。 而直接执行run()方法,会把run方法当成一个main线程下的普通方法去执行。并不会在某个线程中执行它,所以这并不是多线程工作

    总结:调用start方法可启动线程并使线程处于就绪状态,而run方法只是thread的一个普通方法调用,还是在主线程执行
  • 相关阅读:
    [zz]struct epoll_event
    [zz]libev 简介
    [zz]红黑树
    [zz]leveldb 实现原理
    [zz]使用 libevent 和 libev 提高网络应用性能
    [zz]AVL树
    [zz]do...while(0)的妙用
    Mybatis中的缓存简介
    Spring框架的介绍
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/12293792.html
Copyright © 2011-2022 走看看