课堂练习题
1.
package ThreadDemo;
public class MyThread extends Thread {
@Override//重写run方法
public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+".你好,来自线程"+Thread.currentThread().getName());
}
}
}
package ThreadDemo;
public class Text {
public static void main(String[] args) {
// TODO Auto-generated method stub
//多线程不是“并行”,随机交替运行
MyThread thread1=new MyThread();
MyThread thread2=new MyThread();
thread1.start();
thread2.start();
}
}
2
package ThreadDemo;
public class SecondThread implements Runnable{
@Override
public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+".你好,来自线程"+Thread.currentThread().getName());
}
}
}
package ThreadDemo;
public class Text2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
SecondThread r=new SecondThread();
Thread t1=new Thread(r);
Thread t2=new Thread(r);
t1.start();
t2.start();
}
}
package ThreadDemo;
public class ClimbThread extends Thread {
private int time;
public int num=0;
public ClimbThread(String name,int time,int kilometer){
super(name);
this.time=time;
this.num=kilometer*1000/100;
}
public void run(){
while(num>0){
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"爬完100米!");
num--;
}
System.out.println(Thread.currentThread().getName()+"到达终点!");
}
}
package ThreadDemo;
public class Text3 {
public static void main(String[] args) {
ClimbThread young=new ClimbThread("年轻人",500,1);
ClimbThread old=new ClimbThread("老年人",1500,1);
System.out.println("***********开始爬山**************");
young.start();
old.start();
}
}
package ThreadDemo;
public class Vip extends Thread {
public void run(){
for(int i=0;i<10;i++){
System.out.println("特需号:"+(i+1)+"号病人在看病!");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package ThreadDemo;
public class Text5 {
public static void main(String[] args) {
int j;
Vip vip=new Vip();
Thread t1=new Thread(vip);
t1.setPriority(Thread.MAX_PRIORITY);
t1.start();
for(j=0;j<20;j++){
System.out.println("普通号:"+(j+1)+"号病人在看病!");
if(j==9){
try {
t1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
*********************课后练习题
1.一个单CPU的机器,如何同时执行多个线程?请简述原理。
将CPU的执行时间分成多个时间片,分配给不同的线程,当一个时间片执行完后,该线程就可能让出CPU使用权限交给下一个时间片的其他线程执行。
2.调用线程对象的start()方法会执行run()方法,为什么不能直接调用run()方法?
如直接调用run()方法,只会执行里面的内容,不会多开启一条线程,想开启一条新的线程,必须要调用start()方法。
3.线程的生命周期状态?
创建状态:new Thread()时;
就绪状态:调用start方法启动线程时;
运行状态:执行run方法时;
诸塞状态:CUP资源被占用时;
死亡状态:执行完run方法。
package ThreadDemo;
public class Text4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Priority p=new Priority();
Thread t=new Thread();
t.start();
System.out.println("**********显示默认优先级**********");
System.out.println("主线程名:"+Thread.currentThread().getName()+",优先级:"+Thread.currentThread().getPriority());
System.out.println("子线程名:"+t.getName()+",优先级:"+t.getPriority());
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
t.setPriority(Thread.MIN_PRIORITY);
System.out.println("**********修改默认优先级后**********");
System.out.println("主线程名:"+Thread.currentThread().getName()+",优先级:"+Thread.currentThread().getPriority());
System.out.println("子线程名:"+t.getName()+",优先级:"+t.getPriority());
}
}