线程
一,单例模式
public class Single {
private static Single ourInstance = new Single();
//构造方法私有,Single对象只能被new一次
public static Single getInstance() {
return ourInstance
}
private Single() {
}
}
二,线程
1,线程是为了让计算机在同一时间做不同的事,本质是cpu等资源在不断的切换线程的执行
2,启动线程使用线程对象的start方法
3,创建线程的方式一:子类继承覆写方法方式
public class ThreadA extends Thread {
@Override
public void run(){
需要执行的代码块
}
}
4,创建线程的第二种方式:Runnable接口的实现类通过Thread的构造方法传入线程
Runnable的实现类:
public class RunnableC inmplements Runnable {
@Override
public void run() {
需要执行的代码块
}
}
Thread通过构造方法传入实现类
RunnableC runnableC = new RunnableC( );
Thread c = new Thread (runnableC)
c.start( );
三,线程的变种形式
1,匿名对象:直接new出对象,而不给这个对象变量名,只有一次调用这个方法的机会
new ThreadA().start();
2,匿名内部类:没有类名,在构造方法的小括号后加上{},那么这个{}就代表一个类,这样在{}中就可覆写父类Thread的方法,例 Thread(){}; {}相当于继承了父类Thread的子类
Thread a = new Thread(){
@Override
public void run(){
需要执行的代码块
}
}; //父类引用指向子类对象
a.start();
new Thread(new Runnable(){
@Override
public void run(){
代码块
}
}).start();
四,线程安全问题
1,Thread.currentThread().getName();显示哪个线程执行了次代码
2,线程锁:关键字synchronized确保同一时间由一个线程访问该代码块
private final Object lock = new Object();//创建锁,可以是任意类型,但是要加关键字final
public fun(){
synchronized(lock){
需要上锁的代码块
}
}
五,脏读