10-1 Concurrency 第一题 以下是计算机系统中的concurrency现象? A手机上的一个App通过5G网络访问云端数据 B四核CPU,执行多道程序 C使用Observer设计模式的Java程序,其中Subject类和Observer类的执行 D一亿人同时登录12306网站抢购春运火车票 E使用JVM参数-XX: +UseConcMarkSweepGC启动的程序,运行时进行GC F同一个Java程序内的两个线程,共享一个mutable的 答案:ABDEF 第二题 关于process和thread的说法,不正确的是 A多个process之间不共享内存,而多个thread之间可共享内存 BCPU的某个核,在特定时间点只能运行单一process, 但可并行执行多个thread C手机上的App通过5G网络访问云服务器的资源,手机上和服务器上运行的是不同的thread而非不同的process D一个process可以包含多个thread,一个thread只能在一个process里运行 答案:BC 第三题 关于如何创建thread的说法,不正确的是 A从Thread类派生子类A,创建线程时(new A()).start() B类A实现Runnable接口,并实现其run()方法,创建线程时(new Thread(new A())).run() C new Thread(new Runnable(){ public void run() {...};}) .start(); D new Thread(new Runnable(){ public void run() {...};}).run(); 答案:BD 第四题 关于time slicing, interleaving和race condition的说法,正确的是 ATime slicing由OS决定,但程序员可在代码中进行若干有限度的控制 B如果某程序执行结果的正确与否依赖于time slicing,那么意味着程序执行中产生了racecondition C程序interleaving执行的基本单元是Java代码行 D同一个并发程序的多次执行中的time slicing可能完全不同,因此bug很难复现,将此类bug形象的称为Bohrbugs 答案:AB 第五题 关于Java Thread的sleep( )和interrput(),不正确的是__ A若线程的run( )代码中包含Thread.sleep(100),意味着该线程停止执行100ms, CPU交给其他线程/进程使用 B线程t1中包含代码t1. interrupt(),意味着执行完该语句后t1被终止,不会再获得time slicing C线程t1在sleep( )期间可捕获到其他线程发来的中断信号并抛出InterruptedException异常 D线程若捕获了抛出InterruptedException异常,则自动终止执行 答案:BD 第六题 Thread t = new Thread(new Runnable(){ public void run(){ try{ print("a"); .*. Thread. sleep( 200); }catch(InterruptedException e){ print("b"); print("c");};}); t.start(); t. interrupt(); 某类的main( )代码如上所示,执行后可能的输出结果为 ac abc 第七题 如果希望让线程执行结束之后再执行其他线程,即让其他线程暂停,需要调用t.join(); 用于“检测当前线程是否收到其他线程发来的中断信号”的Thread静态方法是Thread. isinterrupted() 在线程类的run( )方法中有以下代码,如果希望收到中断信号后终止线程执行,则TODO位置的语句应该是return try{ Thread. sleep(1000); } catch(InterruptedException e){ TODO;}