线程
多线程和多进程
多进程:在操作系统中能(同时)运行多个任务(程序);
多线程:在同一应用程序中有多个顺序流(同时)执行;
线程的执行过程
class FirstThread extends Thread{
public void run(){
for(int i = 0;i<100;i++){
System.out.println("FirstThread"+i);
}
}
}
class Test{
public static void main(String args[]){
//生成线程类的对象,相当于生成了一个线程
FirstThread ft = new FirstThread();
//启动线程 进入就绪状态
ft.start();
//ft.run()千万不能这样写
for(int i = 0;i<100;i++){
System.out.println("main-->"+i);
}
}
}
结果如图:
如果使用的是run方法,那么他会先运行这个线程
所以要启动线程 应该使用start方法。
实现线程的第二种方法
class RunnableImpl implements Runnable{
public void run(){
for(int i = 0;i< 100;i++){
System.out.println("Runnable-->"+i);
}
}
}
class Test{
public static void main(String args[]){
//生成一个Runnable接口实现类的对象
RunnableImpl ri = new RunnableImpl();
//生成一个Thread,并将Runnable接口实现类的对象作为对象作为参数传递给Thread对象
Thread t = new Thread(ri);
//通知Thread对象执行start方法
t.start();
}
}
在Java中较为推荐第二种方法
在第二种方法里,将线程体和执行线程的类分开了;同时由于Java具有单继承特性,故用接口较好。
线程的简单控制方法![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d8ee81ce2a5108c9d0522267b08e1b21.png)
sleep方法让线程休眠,休眠结束后线程处于就绪状态
线程能否运行仍然要看该线程是否可以抢到cpu。
yield方法让出cpu,但是并不意味着其他线程可以抢到cpu。
setPriority设置线程优先级,但是是否能够一直运行仍要看能否抢占cpu。