sleep() 和 wait() 有什么区别?Thread 类中的 start 和 run 方法有什么区别什么是线程安全? Vector 是一个线程安全类吗?简述一下你对线程池的理解Java 程序是如何执行的
sleep() 和 wait() 有什么区别?sleep
是 Thread 类的类方法sleep 可以在任何地方使用sleep 会休眠当前线程指定时间 有各 long 类型参数 毫秒为单位,释放 cpu 资源,不释放对象锁,休眠时间一到自动苏醒继续执行 wait
是 Object 类的成员方法wait 只能用在同步代码块中 否则抛出异常 Exception in thread "Thread-0" java.lang.IllegalMonitorStateExceptionwait 方法会放弃持有的对象锁,进入等待队列,当该对象调用 notify或者notifyAll 方法后会竞争获取对象锁【等待队列处于等待运行状态】,进入运行jdk1.8 sleep 和 wait 均需要捕获 InterruptedException异常 Thread 类中的 start 和 run 方法有什么区别
系统通过调用线程类的 start 方法用来启动新线程,这个线程处于可运行状态。可以被 JVM 来调度执行,调度执行的其实就是 这个 run 方法,run 方法执行结束,该线程也会终止。直接调用 run 方法,则就是一个普通的 run 方法执行,和多线程没有关系了。 什么是线程安全? Vector 是一个线程安全类吗?
线程安全:多线程访问时,采用加锁机制,当一个线程访问某个类的某个数据时,进行保护,其它线程不能访问这个数据直到这个线程执行结束,其它线程才可使用。不会出现数据不一致或数据污染虽然 Vactor 的所有方法都具有 synchronized 关键字修饰,但是对于复合操作, Vector还是需要进行同步处理的【单个方法的原子性不能保证符合操作也具有原子性】。它这么做并没有解决多线程问题,反而使得概念混乱,性能差【组织编译器乱序】 简述一下你对线程池的理解
线程池的好处
降低资源消耗。通过利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度。任务到达时不许等待线程创建就可以直接执行。提高线程的可管理性。统一进行线程分配、调优和监控 Java 程序是如何执行的
把 .java 文件编译成字节码文件即 .class 文件【编译器】JVM 类加载器加载字节码文件【类加载器】加载完成进行字节码校验【校验器】JVM解释器将字节码文件 翻译成对应系统的机器码去执行【此过程 有个 JIT 动态编译器 提高效率 】



