本人初学java SE 线程知识。。求解呀!!!
class MyThread implements Runnable // 实现Runable接口
{
public void run() //重写run()方法
{
for(int i=0;i<3;i++)
{
System.out.println(Thread.currentThread().getName()+"运行,i="+i);
}
}
}
public class CurrentThreadDemo
{
public static void main(String args[])
{
MyThread a=new MyThread(); //创建对象
new Thread(a,"张三").start(); //启动线程
a.run(); //运行的是Main的线程
}
}
我想问为什么继承Runable接口的类a的线程与a.run()调用的主方法的线程抢CPU,前者抢不过后者。???明明先执行的start()执行起来。。却在main()方法的后面。。。请各位大哥帮忙助呀!!!
------解决方案--------------------虽然先执行的是“new Thread(a,"张三").start(); //启动线程”,但是这句执行了后,这个“张三”的线程就由jvm来调度了,先是进入就绪状态,等待jvm调度运行。这个通常都慢于主线程(紧接着的语句)的运行。
楼主可以让主线程在“张三”start()后,休眠一会儿,Thread.sleep(n); n 选几个数比如,1,2,5,10,20,分别运行,再观察结果。
------解决方案--------------------主线程 优先于 其他线程 sleep 他还没学到吧?
------解决方案--------------------线程常用操作方法
start //启动线程
interrupt //强制终止线程
setName //设置线程名称
getName //取得线程名称
currentThread //当前线程
isAlive //线程状态
sleep //线程休眠
join //强制运行该线程
MAX_PRIORITY MIN_PRIORITY NORM_PRIORITY //线程的优先级
synchronized 同步操作 //
线程有2种启动方式
实现Runnable 接口 和 继承 Thread 类
通常情况下 一般使用继承接口
因为接口可以被 多实现
并且 实现接口 可以共享资源 使程序更安全 更健壮
希望对楼主学习线程 有帮助
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------看大学课本《操作系统》,里面有进程线程的调度机制,大致都差不多
------解决方案--------------------这个可以试试看,然后我想说的是线程是有优先权的,跟具体的调用过程有关,还有主线程永远是优先于其他线程的,这个意思是如果线程被kill掉 ,主线程是最后一个beikill的