JAVA进程和线程详解
进程和线程
进程
进程就是一个在内存中独立运行的程序,有自己的地址空间。
线程
线程是进程内部单一的一个顺序控制流,是进程的子集。
多线程:顾名思义,一个进程中的多个线程。
线程的开始:当要运行一个程序时,JVM首先会找到main函数,然后从main;函数开始执行(也即是程序从main函数开始运行的)。
创建线程的两种方法:
第一种:
定义一个类继承Thread,重写Thread中的run方法,run方法中存放自定义的要让该程序执行的代码。
例:
class Demo extends Thread{
public void run() {
System.out.println(“自定义运行代码”)
}
}
class ThreadDemo{
Public static void main(String[] args){
Demo d = new Demo();
d.start();
}
}
第二种
实现Runnable接口,重写run方法。
用Thread来new一个线程对象,并将Runnable的子类对象传入Thread的构造方法中。
class Demo implements Runnable{
public void run(){
System .out.println(“hello word”);
}
}
class ThreadDemo{
public static void main(String[] args){
Thread t = new Thread(new demo());
}
T.start();
}
两种方法比较:java种的类只能继承一个类,第一种方法中,当Demo继承了Thread之后,就不能在继承其他类。
Demo很可能时另一个类的子类,这时就出现了局限。第二种方法种,Demo实现了接口Runnable,同时还能称为其他类的子类,使用较多。
线程的四个运行状态(运行、堵塞、冻结、消亡)
1.运行:既有执行资格又有执行权。
2.堵塞(临时状态):有执行资格没有执行权。等待CPU的执行权,一旦获得就进入运行状态。
3.冻结:没有执行资格也没有执行权。CPU不会分配执行权给它,知道他被<唤醒。从运行状态进入冻结状态:sleep(time)或wait();被唤醒:sleep的时间到或者notify();
4.消亡:run方法结束,或stop()。
多线程的安全问题:
出现线程安全的情况:
1.存在多个线程
2.多个线程共享数据(共享数据一般是成员变量,局部变量不是)。
3.操作共享数据的语句至少要有两条。
4.出现安全问题的原因:多个线程执行共享数据的代码块时,其中的一个线程还没有执行完代码块,
另一个线程就开始执行代码块,这会造成共享数据的错误。从而出现安全问题。
多线程安全问题的解决:同步。
同步块
Java中提供了同步机制,使用synchonized关键字,同步块也被称为临界资源,语法:sychronized(object) object为任意一个对象通常是将共享资源放置在synchronized定义的区域内
同步方法
同步方法即使在方法修饰符后添加sychronized关键字的方法
例:public synchronized void a(){}