有相同资源,不同操作的线程

1 . 需求:男朋友往银行卡存钱,女朋友取同张银行卡的钱,用线程实现这个过程.
(其中,男存钱,女取钱是不同操作,但是银行卡的钱是共享资源.)这就属于有相同资源,不同操作的线程
2 . 男朋友为一个线程,女朋友为一个线程.
3 .首先,创建资源类Card
其次,实现男操作类,女操作类,都要继承Runnable.因为要实现资源共享.
其次,男女类重写run方法,实现各自的操作.
另外,男女要使用同一个Card对象,则男女类要有Card对象.
具体看代码吧还是:

package com.qf.demo2;
/**
 * 线程:
 *  
 *   共资源    一张银行卡  
 *  
 * 你  往里存钱, 存10次  每次存1000 
 *  你女朋友    取钱, 取10次   每次取1000
 * 
 * 多线程实现存取过程
 * 
 * 共享资源
 *  操作相同  
 * 
 * 
 * 
 * 四个窗口   每个窗口  卖 100张票   没有共享资源      extends  Thread
 * 
 * 四个窗口   一共卖100张票          有共享资源       实现  Runnable
 *  四个窗口操作相同   都是卖票
 * 
 * 
 * 没有共享资源    不同操作       单独创建  不同的 操作类  继承 Thread 
 * 没有共享资源 相同操作       操作类 继承 Thread
 * 有共享资源   相同操作      资源类实现Runnable
 * 有共享资源   不同操作       单独创建资源类   让不同操作类实现 Ruannable
 * 
 *
 */
public class Test {

    public static void main(String[] args) {

        Card card = new Card();
        Boy boy = new Boy(card);
        Girl girl = new Girl(card);

        Thread thread = new Thread(boy);
        Thread thread2 = new Thread(girl);

        thread.start();
        thread2.start();

    }
}

class Card{

    int money = 0;
}

class Boy implements Runnable{
    Card card;
    public Boy(Card card) {
        this.card = card;
    }
    public void run() {
        for (int i = 0; i <10; i++) {
            card.money+=1000;
            System.out.println("你呀, 存了1000块钱,卡里余额为"+card.money);
        }

    }
}
class Girl implements Runnable{
    Card card;
    public Girl(Card card) {
        this.card = card;
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            card.money-=1000;
            System.out.println("你女朋友啊, 取了1000跑了,卡里余额为"+card.money);
        }
    }
}

总结:在主方法中,
1 . 先是创建资源类对象
2 . 创建男女操作类对象,将资源类对象作为男女类对象的构造参数
3 .创建Thread对象,有几个操作对象就创建几个Thread对象,将操作类对象作为Thread对象的构造参数,
4 .此时Thread对象调用start()时,jvm会执行run()方法,虽然将操作类对象传给了Thread对象,但是在源码中,还是操作类对象调用的run().

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值