进程
进程是一个包含自身执行地址的程序,在多任务操作系统中,可以把cpu时间分配给每一个进程,cpu在指定时间片段内执行某个进程,然后在下一个时间片段条至另一个进程中执行,由于转换速度很快,使人感觉进程像是在同时运行。
线程
在一个进程内部可以执行多任务,可以将进程内部的任务称为线程,线程是进程中的实体,一个进程可以拥有多个线程。
============ 我是分割线 ================
java语言中只能继承一个类,如果用户定义的类继承了其他类,就无法继承Thread类,也就无法使用线程,所以java语言提供一个接口,Runneble接口,这个接口定义了run()这个方法。
线程线程的启动:
使线程进入“非可执行”状态,这个状态下cpu不会分给线程时间这个状态可用来暂停一个线程的运行:①sleep ②join ③wait/notify④suspend()/resume()方法
结束线程:
(1)自然消亡
(2)强制死亡(舍弃不用)
创建线程
懒汉式
(单例模式)【浪费时间,把时间换空间】
class sigleton{
//1.私有构造函数
private Singleton(){}
//2.声明一份本类的引用
private static Singeton s;(先声明)
//3.对外提供公共的访问方法
public static Singleton getInstance(){
if(s==null)
//线程1,线程2 ——>用到的时候创建
s= new Singleton();
return s; ——>懒汉式有可能创建多个对象
}
public static void print(){
}
}
饿汉式
(节省时间,浪费空间,一般在开发时用)
class Singleton(){
//1.私有构造函数
private Singleton(){}
//2.创建本类对象
private static singleton s = new singleton();
//对外提供公共的访问方法
private static singleton getInstance(){
return s;
}
public static void print(){
syso
}
}
sleep 和 wait 方法的区别
a.sleep方法必须传入参数
参数就是时间,时间到了自动醒来
wait方法,可以传入参数,也可以不传入参数,传入参数就是参数的时间结束后等待,不传入参数就是直接等待。
b.sleep方法再同步函数或者同步代码块中,不释放锁,使一个现线程暂时停止的方法,暂停的时间有给定的毫秒数决定
wait方法在同步函数或同步代码中释放锁,与notify()方法配合使用,这种方式让wait()无限等下去,直到线程接收到notify或者notify All()消息为止。