这是和线程相关的练习题,共分为...
概念
Thread类
1.为什么重写run方法?
2.run()与start()的区别?
3.一个实现了线程的对象调用两次start方法会发生什么?
4.优先级高的线程先执行,对嘛?
5.join()与sleep()的区别?
6.以下代码执行stop()与interrupt()的运行结果分别是?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Thread my = new Thread(){ @Override public void run() { System.out.println("我现在要休息10秒 "+new Date()); try { Thread.sleep(10000); System.out.println("我醒来了"); } catch (InterruptedException e) { System.out.println("休息结束了,出现了异常 "+new Date()); }finally { System.out.println("带上装备,开工! "+new Date()); } System.out.println("我休息好了 "+new Date()); } }; my.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
|
7.请问以下程序的执行结果是什么?
1 2 3 4 5 6 7 8 9 10 11
| new Thread(new Runnable() { @Override public void run() { System.out.println("hello"); } }){ @Override public void run() { System.out.println("world"); } }.start();
|
Runnable接口
1.对比继承Thread类实现接口方式的好处是什么?
2.
Synchronized
答案
概念
thread类
为什么重写run方法
不是所有代码都需要被线程执行,为了区分被线程执行的代码,java提供Thread类的run方法包含被执行的代码
一般来说,被线程执行的方法比较耗时
run()与start()的区别?
run()仅仅是封装被线程执行的普通代码,直接调用是普通方法
start()首先启动了线程,然后由jvm调用线程的run方法
一个实现了线程的对象调用两次start方法会发生什么?
抛IllegalThreadStateException非法线程状态异常,一个线程只能启动一次.
优先级高的线程先执行,对嘛?
不对,优先级高仅仅表示获取CPU执行权的概率高。要多次运行才能看出效果,存在随机性
Thread的join()与sleep()的区别?
首先sleep是静态方法而join是普通成员方法
调用线程对象的join方法可使得指定时间之后再执行后面的代码,这和sleep没什么区别
但是当join不设置值或者0的时候可以等待调用的线程对象执行完毕,而sleep只能估算时间
以下代码执行stop()与interrupt()的运行结果分别是?
stop : ①,③ ; interrupt : ①,③,④,⑤
stop是直接中断线程,不会抛出异常,但是如果在try块内终止,会执行finally块
interrupt是抛出异常形式的中断
第7小题
运行结果为world;这个题考察的对线程及匿名内部类和java继承机制的了解
首先前面部分是调用Thread的构造方法并传入匿名内部类,run方法被其覆盖
后面的部分,实例对象后面如果带{}代表匿名子类而重写了run方法
故而结果为world,如果在匿名子类内调用super.run();会得到结果hello
Runnable接口
对比继承Thread类实现接口方式的好处是什么?
避免了单继承的问题带来的局限性
适合多个相同程序的代码处理同一个资源的情况,把线程同程序的代码、数据有效的分离
也就是一个对象可以让多个线程执行它,而继承方式是一个对象一个线程