多线程的实现方式
1,exrends Thread 类 重写run方法.用 start 开启
2,implements Runnable接口 重写run方法,用start开启
也可以通过匿名内部类来实现多线程的创建和开启
new Thread(){
void run(){
//代码
}
}.start();
new Thread(new Runnable(){
public void run(){
//代码
}
}){}.start;
线程安全使用 synchronized 代码块 或synchronized函数来实现…后期可以通过lock unlock 来完成锁的取得和释放,
synchronized函数是sync代码块的简写格式,
synchronized函数的锁是this 就是当前类,
synchronized代码块的锁是任何对象,,,这个对象也称为监视器
Thread下的wait() ,notify() 是监视器对象的方法,是定义在Object中的,
jdk1.5后出现了lock 接口,,将同步函数,封装,使用更方便.
//lock锁要new子类的对象
Lock lock=new ReentrantLock();
public void show(){
try{
//开启锁
lock.lock();
//通过lock中的方法new监视器对象,
/*监视器对象中的包含等待,唤醒方法.但是该监视器对象可以实现在一个锁上挂好几组监视方法,互不影响
可以用来实现多制造者 ,多消费者的线程,
*/
Condition cond=lock.newCondition();
}finally{
lock.unlock();
//释放锁一定要放在必须执行的代码块的,如果运行中出现意外,可以确保一定会释放锁,让其他线程可以继续运行
}
}
写一个卖票的实例
class Bank{
int num=0;
public viod add(int r){
synchronized(Bank.class){
num=num+r;
System.out.println("现有金额"+num+Thread.currentThread());
//此处应有try catch
Thread.sleep(100);
}
}
}
class Consumer implements Runnable{//继承runnable接口 实现run方法
Bank b=new Bank();
public viod run(){
for(int x=0 ;x<4;x++){
b.add(100);
}
}
}
public class show{
public static void main(String [] args){
Consumer c=new Consumer();
Thread t=new Thread(c);
t.start();
}
}