进程:一种自包容的运行程序,由操作系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存。
线程:线程是进程内部单一的顺序控制流。一个进程拥有多个线程。多个线程共享一个进程的内存空间。
基于进程的特点是允许计算机同时运行两个或更多的程序。
基于线程的多任务处理环境汇总,线程时最小的处理单位
多任务处理的两种类型:
基于进程
基于线程
主线程:main方法一运行,就开启主线程。
主线程特点: 1、最先开始
2、最后结束
3、产生其他的子线程
4、回收资源
创建线程的两种方式:声明一个Thread类的子类,并覆盖run()方法
Class myThread extends Thread{
Public void run(){}覆盖该方法
}
声明一个Runnable接口的类,并实现run()方法
Class mythread implements Runnable{
Public void run(){}实现该方法
}
继承方法启动线程,调用start();
接口需要在之前创建线程时,需要传入Runnable实现类对象,那么线程启动时,会执行该对象的run();
Thread three=new Thread(new TwoThread());
three.start();
在线程类中,调用start和run的区别。
如果直接调用run(),时普通方法调用,不会再主线程基础上,开启子线程,是单线程。
条用start(),会在主线程基础那个,开启子线程,多个任务同时执行。
线程拥有八种状态:
0、新建
1、就绪
2、运行
3、睡眠
4、等待
5、挂起
6、阻塞
7、死亡
线程优先级:当两个或两个以上的线程,同时处于就绪状态,等待CPU执行。优先级高的线程,会优先得到执行。优先级一共分为10级。数字越大,优先级越高。
线程同步(线程安全):当两个或两个以上的线程同时操作同一个资源时,在同一时间只允许一个线程进行访问,别的线程进行等待。
Synchronzeed同步,可以作为方法修饰符。表示当一个线程正在访问资源时,别的线程只能等待。当该线程结束对该资源的访问,才允许别的线程访问。
同步造成的结果:1、数据安全
2、效率低下
同步有两种方式:同步方法和同步块
同步方法:public synchronized void test(){}
同步块:public void run(){
Synchorized(obj){
}
}
Wait和sleep的区别
1、Sleep方法在线程类Thread中定义,waiti方法在object中定义
2、wait方法只能放在方法或同步块中,表示当前线程对资源进行等待。Sleep方法可以放在任何位置,表示当前线程休眠。
3、wait方法要释放对象锁,sleep方法不会释放对象锁。
4、Wait方法使用后,线程要notify唤醒后才能继续执行。而sleep方法执休眠结束后,线程自动继续执行。