Class Thread
Thread或其子类都属于线程
Thread类的重要方法
public void run();//凡是放在run方法里的代码都是以线程身份运行的,线程结束的关键就是run()中的代码是否执行完。默认为空
start();//只有调用start()方法才会作为线程并发执行run()
//所以要将线程填在run中,调用start()方法执行,如果直接调用run()方法,就不会作为线程身份执行,也不是并发执行,而是串行的。
getName();//获取线程名字
sleep();//执行完一个线程后”睡“多久
调用run与start方法比较
main()本身就是一个线程(主线程),如果调用run方法,执行main就会产生一个Thread对象,接下来就会执行run,然后结束,相当于调用了一个函数。并没有创建新的线程。
而如果调用start,就会创建一个新的线程,再运行run中的线程,两个线程并发执行。
创建线程的两种方法
//方法一:从Thread类继承,重写run()方法
//创建线程
public class MyThread extends Thread{//定义自己的Thread类从Thread类继承
@Override
public void run(){ //重写run()方法
for(int i=-1;i>=-10;i--)
{
System.out.prinrln(""+getName()+" "+i);//打印线程名以及数字
try{
sleep(100);//让这个线程睡0.1s,将cpu让出来,使得两个线程来回切换
}catch(Exception e){ }
}
}
}
public static void main(String []args){
new Mythread().start();//线程0
new Mythread().start();//线程1
}//加上main一共三个线程
//方法二:实现Runnable接口,重写run()方法(更加常见)
public class MyThread
implements Runnable
{
@Override
public void run(){
for(int i=-1;i>=-10;i--){
System.out.println(" "+Thread.currentThread().getName()+" "+i);//与上面方法不
同,他没有继承Thread,所以不能直接调用getName()方法
}
}
public static void main(String []args){
new Thread(new MyThread()).start();
new Thread(new MyThread()).start();
}
]