多线程

多线程的实现方式
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();
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值