java的多线程

一直对线程理解不清,今天总结一下线程知识。

单个生产者单个消费者问题()


核心是:生产者和消费者要拿到同一把锁,这里用的是this作为锁,即BankCard的实例本身

核心类:

public class BankCard {
    private int money;


    public int getMoney() {
        return money;
    }


    public void setMoney(int money) {
        this.money = money;
    }
    
    public void consum(){
        synchronized(this){
            while(this.money<1){
                try {
                    System.out.println("暂时没钱,坐等取钱。。。。。");
                    this.wait();
                } catch (InterruptedException ex) {
                }
            }
                this.money = this.money-1;
                System.out.println("消耗了一份--------------");
        }
    }
    
    public void produce(){
        synchronized(this){
            while(this.money<1){
                System.out.println("一直在加钱‘’‘’‘’‘’");
                this.money = this.money+1;
                System.out.println("增加了一份+++++++++++++++");
            }
//            System.out.println("有钱了,通知取钱");
            this.notifyAll();
        }
    }
    
}

然后再写两个线程即可,可以用继承Thread的方式,也可以用实现Runnable的方式,比较简单:

public class ThreadFather extends Thread{
 BankCard card;


    public ThreadFather(BankCard card) {
        this.card = card;
    }
    @Override
    public void run() {
        while(true){
            card.produce();//不断生产
        }
    }
    
}


public class ThreadSon extends Thread {


    BankCard card;


    public ThreadSon(BankCard card) {
        this.card = card;
    }


    @Override
    public void run() {
       while(true){
           card.consum();//不断消费
       }
    }


}


最后,写一个测试类:

public class test {
    public static void main(String[] args){
        BankCard bc = new BankCard();
        ThreadSon ts = new ThreadSon(bc);
        ThreadFather tf = new ThreadFather(bc);
        ts.start();
        tf.start();
    }
}

结果是:


这个例子比较简单,不过容易理解(可以把produce()方法中的注释去掉,就很容易发现问题,问题可自行解决),

接下来就可以解决一些比较复杂的线程同步问题了。

多消费者多生产者同步问题。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值