多线程

来源:互联网 发布:java设计模式uml 编辑:程序博客网 时间:2024/06/06 17:56

多线程的实现方式
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();        }}