1. 进程是程序的一次执行(进程本身不是程序),对应了代码加载、执行至执行完毕的一个完整过程,或者说是程序在处理机中的一次运行。
  2. 进程既包括其所要执行的命令,又包括执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等。
  3. Java中线程的状态共有4种,分别为:新建、可运行状态、死亡、阻塞。
  4. Java对被阻塞的线程是如何处理的?【背】
    在Java中,所有被阻塞的线程按次序排列,组成一个阻塞队伍。而所有就绪但没有运行的线程则根据其优先级进入一个就绪队列,当CPU空闲时,如果就绪队列不空,队列中第一个具有最高优先级的线程将运行。当一个线程被抢占而停止运行时,它的运行状态被改变并放到就绪队伍的队尾;同样,一个被阻塞的线程就绪后通常也放到就绪队列的队尾。
  5. 线程:线程是进程执行过程中产生的多条执行线索,是比进程单位更小的执行单位,线程在形式上同进程十分相似,都是用一个按序执行的语句序列来完成特定的功能,不同的是,线程没有入口,也没有出口,自身不能自动运行,必须栖身于某一个进程中,由进程触发执行,并且属于同一进程的线程共享该进程的系统资源。【背】
  6. 要让某个子类对象实现多线程:声明实现Runnable接口,在类内实现run()方法,声明和创建线程对象,并让该对象调用start()方法。
  7. 线程的结构都包含哪些部分,作用分别是什么?【背】
    在Java中,线程由虚拟CPU、执行的代码、处理的数据三部分组成。
    虚拟CPU的作用是控制整个线程的运行,
    执行的代码的作用是由Thread类控制按序运行,
    处理的数据的作用是传递给 Thread类,由代码在执行过程中进行处理。
  8. 用 Thread类的子类创建线程的过程是什么?【背】
    (1)从Thread类派生出一个子类,在类中一定要实现run()
    (2)用派生出的子类创建一个对象。
    (3)用start()方法启动线程。
  9. 请说明创建线程两种方法的适用条件:【背】
    (1)适用于采用实现 Runnable接口的情况:因为Java只允许单重继承,如果一个类已经继承了 Thread,就不能再继承其他类,这就被迫采用实现 Runnable的方法。另外,由于原来的线程采用的是实现 Runnable接口的方法,可能会出于保持程序风格的一贯性而继续使用这种方法。
    (2)适用于采用继承 Thread方法的情况:当一个run()方法置于 Thread类的子类中时,this实际上引用的是控制当前运行系统的 Thread实例,部分代码比较简洁,所以许多Java程序员愿意使用继承 Thread的方法。
  10. 使用 synchronized 修饰一个方法时,整个方法会被同步。这意味着同一时间只有一个线程可以访问这个方法。
  11. 请写出用Thread类的子类创建线程并启动线程所包含的步骤:
    (1)从Thread类派生出一个子类。(1分)
    (2)实现run()。(1分)
    (3)用该类创建一个对象。(1分)
    (4)用start()方法启动线程。(1分)
  12. notify()/notifyAll()可以将等待队列中线程唤醒。
  13. sleep()/wait()/join()可以将线程挂起。
  14. yield()强制终止线程的执行。
  15. 同优先级的线程按“先进先出”调度原则。
  16. 线程优先级的高低可能影响线程执行的先后顺序,但不是阻塞的原因。
  17. Java对线程的调度采取优先级策略。
  18. Java中断线程执行的方法:interrupt
  19. 运行状态的线程执行stop方法后进入死亡状态。
  20. 编译器在编译阶段无法检测到死锁。
  21. synchronized修饰操作共享数据的一个变量或一个方法。
  22. Java中如何实现“对象互斥锁”?【背】
    Java语言中,有两种方法可以实现“对象互斥锁”,一是用关键字volatile来声明一个共享数据(变量),二是用关键字 synchronized来声明操作共享数据的一个方法或一段代码。
  23. 请写出在Java语言中,关键字synchronized的作用:【背】
    (1)使用关键字synchronized定义临界段(1分),
    (2)能对共享对象的操作上锁(2分)
  24. wait可以释放当前当前线程持有的对象互斥锁。
  25. 线程的四种状态:新建,可运行状态,死亡,阻塞。
  26. wait和sleep常引起阻塞。
  27. 调用start可使线程出于可运行。
  28. 线程优先级:级别最低是1,默认级别是5,最高级别是10。
  29. sleep和yield可以给同等优先级的其他线程一个运行的机会。
  30. Thread的静态方法currentThread可以引用正在运行的线程。
  31. Thread类的setPriority可以设置线程优先级。
  32. Thread中代表最高优先级的常量:MAX_PRIORITY
  33. synchronized可以阻止多个线程同时访问同一个条件变量。
  34. 用关键字synchronized标识的代码段或方法即为“对象互斥锁”锁住的部分。
  35. synchronized语句的参数必须是this。
  36. 当持有锁定标志的线程运行完synchronized()调用包含的程序块后,这个标志将会被:自动返还。
  37. 什么时候需要考虑线程的互斥问题?【背】
    当同时运行的线程需要共享数据时需要考虑线程的互斥问题。
  38. 在调用一个对象的wait方法时,必须持有该对象的:锁定标识。