run()运行结束后 kthread run会再次进入runnable()状态吗?

> 问题详情
下列说法中错误的一项是()。A.一个线程是一个Thread类的实例B.线程从传递给线程的Runnable实例的r
悬赏:0&***豆
提问人:匿名网友
发布时间:
下列说法中错误的一项是()。A.一个线程是一个Thread类的实例B.线程从传递给线程的Runnable实例的run()方法开始执行C.线程操作的数据来自Runnable实例D.新建的线程调用start()方法就能立即进入运行状态请帮忙给出正确***和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1下列说法中,正确的一项是(&&)。A.AWT的高级事件依赖于触发此类事件的类,可以和特定的动作相关联B.AWT的高级事件依赖于触发此类事件的类,可以不和特定的动作相关联C.AWT的低级事件是在构件或者容器上发生的事件D.AWT的低级事件是基于语义的事件,不一定和特定的动作相关联2下列数据类型转换,必须进行强制类型转换的是(&&)。A.byte→intB.short→dongC.fioat→doubleD.int→char3已知如下代码:&&boolean m=&&if(m==false)&&System.out.prinfln("False");&&else&&System.out.println("True");A.假B.真C.NoneD.An error will occur when running4线程在生命周期中要经历5种状态。如果线程当前是新建状态,则它可到达的下一个状态是(&&)。A.运行状态B.阻塞状态C.可运行状态D.终止状态
我有更好的***
相关考试课程
请先输入下方的验证码查看最佳***
图形验证:
验证码提交中……
享三项特权
享三项特权
享三项特权
选择支付方式:
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线***QQ:
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线***QQ:
恭喜您!升级VIP会员成功
常用邮箱:
用于找回密码
确认密码:runnable与handler结合使用,其实跟在Thread中的run()中sleep的效果是一样的
时间: 14:36:05
&&&& 阅读:815
&&&& 评论:
&&&& 收藏:0
标签:这是一种可以创建多线程消息的函数使用方法:1,首先创建一个Handler对象Handler handler=new Handler();2,然后创建一个Runnable对象Runnable runnable=new Runnable(){&& @Override&& public void run() {&&& // TODO Auto-generated method stub&&& //要做的事情,这里再次调用此Runnable对象,以实现每两秒实现一次的定时器操作&&& handler.postDelayed(this, 2000);&& }};3,使用PostDelayed方法,两秒后调用此Runnable对象handler.postDelayed(runnable, 2000);实际上也就实现了一个2s的一个定时器4,如果想要关闭此定时器,可以这样操作handler.removeCallbacks(runnable);当然,你也可以做一个闹钟提醒延时的函数试试,比如,先用MediaPlayer播放闹钟声音,如果不想起,被停止播放之后,下次就5分钟后再播放,再被停止的话,下次就4分钟后播放,&&&&&&只要更改延时的时间就可以实现了,用一个static对象的话会比较容易操作。标签:
&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!1.& 首先是使用上的区别,先看代码:
class MyThread extends Thread
public void run() {
System.out.println("do things");
class MyRunnable implements Runnable
public void run() {
System.out.println("do things");
可以看到使用Thread是继承关系,而使用Runnable是实现关系。我们知道java不支持多继承,如果要实现多继承就得要用implements,所以使用上Runnable更加的灵活
2. 关于共享数据的问题
Runnable是可以共享数据的,多个Thread可以同时加载一个Runnable,当各自Thread获得CPU时间片的时候开始运行runnable,runnable里面的资源是被共享的
这里用实例来讲解:
首先分别定义一个thread和一个runnable,things这个变量即为所想要共享的资源
class MyThread extends Thread
int things = 5;
public void run() {
while(things & 0)
System.out.println(currentThread().getName() + " things:" + things);
class MyRunnable implements Runnable
public MyRunnable(String name)
this.name =
int things = 5;
public void run() {
while(things & 0)
       things--;
System.out.println(name + " things:" + things);
随后,用三个Thread来运行看:
public class ThreadTest {
* @param args
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
MyThread thread3 = new MyThread();
thread1.start();
thread2.start();
thread3.start();
结果如下:
Thread-0 things:5
Thread-0 things:4
Thread-2 things:5
Thread-1 things:5
Thread-1 things:4
Thread-1 things:3
Thread-1 things:2
Thread-1 things:1
Thread-2 things:4
Thread-2 things:3
Thread-2 things:2
Thread-2 things:1
Thread-0 things:3
Thread-0 things:2
Thread-0 things:1
可以看到每个Thread都是5个things,所以资源是不共享的
下面用一个Runnable在3个Thread中加载尝试看看:
public class ThreadTest {
* @param args
public static void main(String[] args) {
MyRunnable run = new MyRunnable("run");
Thread th1 = new Thread(run, "Thread 1");
Thread th2 = new Thread(run, "Thread 2");
Thread th3 = new Thread(run, "Thread 3");
th1.start();
th2.start();
th3.start();
结果如下:
run things:3
run things:2
run things:1
run things:0
run things:3
一共打印出了5次,表示things资源使用了5次
3、线程Thread的5状态
创建:执行new方法创建对象,即进入创建状态
就绪:创建对象后,执行start方法,即被加入线程队列中等待获取CPU资源,这个时候即为就绪状态
运行:CPU腾出时间片,该thread获取了CPU资源开始运行run方法中的代码,即进入了运行状态
阻塞:如果在run方法中执行了sleep方法,或者调用了thread的wait/join方法,即意味着放弃CPU资源而进入阻塞状态,但是还没有运行完毕,带重新获取CPU资源后,重新进入就绪状态
停止:一般停止线程有两种方式:1执行完毕run方法,2调用stop方法,后者不推荐使用。可以在run方法中循环检查某个public变量,当想要停止该线程时候,通过thread.para为false即可以将run提前运行完毕,即进入了停止状态
4、线程分类
a. 用户线程,比如主线程,连接网络的线程
b. 守护线程,运行在后台,为用户线程服务 Thread.setDeamon,必须在start方法前调用。守护线程里面不能做一写IO读写的操作。因为当用户线程都结束后,守护线程也会随jvm一起被销毁,如果这个时候守护线程里面还有IO未完成的操作,就会崩溃
阅读(...) 评论()

参考资料

 

随机推荐