java面向对象第七章

第一题:一个单的CPU的机器,如何同时运行多个线程?请简述其原理
因为各个线程都是不断切换轮流执行的,它们每个线程轮流占用的时间片很短很短,人是察觉不到的。

第二题:调用线程对象的start()方法会执行run()方法,为什么不能直接调用()run方法?
run()方法只是一个类中的普通方法,直接执行和普通的方法没有设么两样;
start()方法则不同,它首先做了创建线程等一系列工作,然后调用行的run()方法;
直接调用run方法是无法开启一个新线程的。
start方法其实是在一个新的操作系统线程上面去调用run方法。换句话说,直接调用run方法而不是调用start方法的话,它并不会开启新的线程,而是在调用run的当前的线程当中执行你的操作。
如果是run,则输出main。(直接调用run其实就是一个普通的函数调用而已,并没有达到多线程的作用)

第三题:线程的生命周期中包含几种状态,请描述每种状态的特征。
新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();
就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;
运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

第四题:

package cn.jbit.thread.ex1;

public class Test {
	public static void main(String[] args) {
		Mythread thread1 = new Mythread();		
        thread1.start();
	}
}
class Mythread extends Thread{
	public void run(){
		for(int i=1;i<=5;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}

package cn.jbit.thread.ex1;

public class Test2 {
	public static void main(String[] args) {
		Thread thread1 = new Thread(new Mythread2());		
        thread1.start();
	}
}
class Mythread2 implements Runnable{
	public void run(){
		for(int i=1;i<=5;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值