b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

多线程编程面试题_嵌入式linux多线程编程_多线程编程java(2)

电脑杂谈  发布时间:2017-02-16 23:07:16  来源:网络整理

通过线程池来创建更有效率。

解答:最好使用Runnable接口,这样你的类就不必继承Thread类,不然当你需要多重继承的时候,你将一筹莫展(我们都知道Java中的类只能继承自一个 类,但可以同时实现多个接口)。在上面的例子中,因为我们要继承Base类,所以实现Runnable接口成了显而易见的选择。同时你也要注意到在不同的 例子中,线程是如何启动的。按照面向对象的方,你应该只在希望改变父类的行为的时候才去继承他。通过实现Runnable接口来代替继承Thread 类可以告诉使用者Counter是Base类型的一个对象,并会作为线程执行。

解答:下图说明了线程的各种状态.

可执行(Runnable):当调用start()方法后,一个线程变为可执行状态,但是并不意味着他会立刻开始真正地执行。而是被放入线程池,由线程调度器根据线程优先级决定何时挂起执行。

  1. MyThread aThread = newMyThread(); 
  2. aThread.start();                   //becomes runnable 

执行中(Running):处理器已经在执行线程的代码。他会一直运行直到被阻断,或者通过静态方法Thread.yield()自行放弃执行的机会,考虑到场景切换所带来的开销,yield()方法不应该被经常调用。

等待中(Waiting):线程由于等待I/O等外部进程的处理结果而处于被阻断的状态,调用currObject.wait()方使得当前线程进入等待状态,直到其它线程调用currObject.notify()或者currObject.notifyAll()。多线程编程面试题

睡眠中(Sleeping):重载方法Thread.sleep(milliseconds),Thread.sleep(milliseconds,nanoseconds)可以迫使Java线程进入睡眠状态(挂起)。

由于I/O阻塞(BlockedonI/O):当I/O条件发生变化时(例如读取了几个字节的数据)会迁移到可执行状态。

由于同步阻塞中(Blockedonsynchronization):当获取锁之后会进入执行中状态。

Thread.State枚举类型包含了Java虚拟机支持的全部的线程状态类型,下面几点Java的线程宗旨确保了这些线程状态成为可能。多线程编程面试题

对象可以被任何线程共享和修改。

线程调度器的抢占性特性,使得线程可以随时在/不在多核处理之间切换处理器内核,这意味着方法可以在执行的过程中切换状态。否则方法中的死循环将永远阻塞CPU,并且使得不同线程的其他方法始终得不到执行。

为了防止线程安全问题,那些脆弱的方法或者代码块可以被锁定。这使得线程可以处于被锁定或者加锁请求处理中两种状态。

线程在处理I/O资源(如Sockets,文件句柄,连接等)时会进入等待状态,

处于I/O读写中的线程不能被切换,因此他们或者以成功/失败的结果正常完成处理,或者其它线程关闭了相应的资源,迫使他进入死亡或者完成的状态。这也是为什么一个合理的超时时间可以避免线程由于I/O处理而被永远阻塞,从而导致严重的性能问题。

线程可以进入睡眠状态,以使得其他处于等待状态的线程有机会执行。

解答:当一个任务调用了yield()方法,它将从执行中状态转变为可执行。而当一个任务调用了sleep(),则将从执行中状态转变为等待中/睡眠中状态。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32846-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...