进程、线程

进程里面是线程。线程是真正的执行部分。
Thread类中的run方法 用于存储线程要运行的代码。
start(); 开启线程并执行该线程的run方法。
run();仅仅是对象调用方法,而线程创建了并不运行。

开启多线程的方式
1、继承Thrad类,重写run方法。
2、实现Runnable接口,重写run方法,将Runnable实现类的对象传入Thread类的有参构造生产线程。
步骤:
①定义类实现Runnable接口
②覆盖Runnable接口中的run方法。
③通过Thread类建立线程对象。
④将Runnable接口中的子类对象作为实际参数传递给Thread类的构造函数。
⑤调用Thread类的start方法开启线程并调用Runnable接口中子类的run方法。

多线程的运行出现了安全问题
问题原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句执行了一部分,还没全执行完,另一个线程就参与进来了导致共享数据错误。
解决办法:对于多条操作的共享数据的语句,我们只能让一条线程全部执行完在执行下一条,在此条执行过程中,其他的线程是不可以参与进来的!
方法:同步代码块

Synchronized(对象){
      需要被同步的代码
}

3、实现callable接口,实现返回有结果的线程。
4、线程池(Spring提供的线程池)ThreadPoolTaskExecutor。

设计模式
解决某一类问题最有效的方法,java中23种设计模式。
单列设计模式:解决一个类在内存只存在一个对象。
要想保证唯一:
1.为了不让其他程序建立该类对象,要先禁止其他程序建立该类对象。
2.为了其他程序可以访问该类对象,要在本类中自定义一个对象。
3.为了其他程序方便的对自定义对象的访问,可以提供一些访问方式。

饿汉模式:开发常用,需要先初始化对象。
例:Single类一进内存 就已经建立好了对象。

class Single{
private static Single s = new Single();
prvate Single(){}
public static Single getInstance(){
return s;
}
}

懒汉模式:对象是方法被调用时,才初始化,也叫对象的延迟加载,Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。

class Single{
private static Single  s = null;
private Single(){}
public static Single getInstance(){
    if(s==null)
    s=new Single();
    return s;
}
}

你可能感兴趣的:(进程、线程)