java 线程模拟

今天对java的线程做了进一步的认识,下面讲讲自己对线程的理解
我们要实现一个自己的线程可以继承Thread这个类即可

我们首先创建一个接口,模拟Runnable这个接口

public interface RunnableSY{
    public void run();//表示一个方法
}

这个接口这样命名为了仿照和区别,其他的都是添加SY,没有其他的含义
然后创建一个类ThreadSY,实现这个接口

public class ThreadSY implements RunnablesSY{
    private RunnableSY  ru;
    private String name;
    //初始化方法     
    private void init(RunnableSY ru,String name){
        this.ru = ru;
        this.name = name;
    }
    //构造方法
    public ThreadSY() {
        init(null, "threadsy");
    }
    public ThreadSY(RunnableSY ru,String name) {
        init(ru, name);
    }
    //这里仿照Thread里面的run方法写的,为什么这么写是有原因的
    public void run() {
        if(ru!=null){
            ru.run();
        }
    }
    public void start(){
        System.out.println("name:"+this.name);
        run();
    }   
    public final String getName(){
        return this.name;
    }
    public final void setName(String name){
        this.name = name;
    }
}

这样我们的两个类就完成了,其中ThreadSY这个类并不是完全和Thread的功能一样,Thread里面还有线程队列,权限操作,以及其他语言实现的部分方法,native关键字。
下面讲相应的使用
我们可以写一个类直接继承ThreasSY。然后重写他的run方法来实现相应的功能。同时也可以直接继承RunnableSY,实现他的run方法,然后构造一个ThreadSY 来实现run方法。因为java里面一个类只能继承一个父类,可能我们需要对一个类使用线程但是他继承了其他的类,就可以通过implements RunnablesSY这样来调用线程的运行。
具体工作中在什么地方会用到这个设计暂时还未想到。这是一个什么设计模式也还未看懂,欢迎大家指教。

好的,我会尽力回答你的问题。以下是 Java线程模拟银行取款的代码实现。 ```java public class BankAccount { private int balance; // 银行账户余额 public BankAccount(int initialBalance) { balance = initialBalance; } // 取款方法 public synchronized void withdraw(int amount) { if (balance >= amount) { System.out.println("取款成功,取出 " + amount + " 元"); balance -= amount; } else { System.out.println("余额不足,取款失败"); } } // 查询余额方法 public synchronized void checkBalance() { System.out.println("当前余额为 " + balance + " 元"); } } public class BankClient implements Runnable { private BankAccount account; public BankClient(BankAccount account) { this.account = account; } @Override public void run() { while (true) { // 模拟不定期取款 int amount = (int) (Math.random() * 1000); account.withdraw(amount); try { // 线程休眠,模拟银行服务 Thread.sleep((int) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } account.checkBalance(); } } } public class Main { public static void main(String[] args) { BankAccount account = new BankAccount(10000); BankClient client1 = new BankClient(account); BankClient client2 = new BankClient(account); Thread thread1 = new Thread(client1); Thread thread2 = new Thread(client2); thread1.start(); thread2.start(); } } ``` 以上代码实现了一个简单的 Java线程模拟银行取款的程序。程序中,BankAccount 类表示银行账户,包含取款和查询余额的方法。BankClient 类表示银行客户,模拟不定期地取款和查询余额的操作。Main 类是程序的入口,创建了两个 BankClient 实例,并启动了两个线程分别执行客户操作。 注意,在 BankAccount 类的取款方法和查询余额方法上都使用了 synchronized 关键字,确保了线程安全。此外,线程休眠的时间也是随机的,以模拟不同客户不定期的取款和查询操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值