线程基础学习第一篇(多个线程竞争一把锁)

线程安全的概念:就是当多个线程同时访问同一个类(对象或方法)时,这个类始终都能保持正确的行为,那个这个类(对象或方法)就是线程安全的。

synchronized :可以在任意的对象及方法上加锁,而加锁的代码块被称为“互斥区”或“临界区”。

加锁的代码(重写run方法并且加上synchronized方法)

public class MyThread extends Thread {
   

    private int count = 5;

    //synchronized加锁
    public synchronized void run() {
        count--;
        System.out.println(this.currentT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来给你写一个实现了Runnable接口的多线程程序,模拟两个售票窗口的售票情况,并且分别设置了线程的优先级为1和5。程序输出了每个线程售出的票数。 ```java public class TicketRunnable implements Runnable { private int tickets = 10; // 初始票数为10张 @Override public void run() { String threadName = Thread.currentThread().getName(); int priority = Thread.currentThread().getPriority(); while (tickets > 0) { synchronized (this) { // 使用同步确保线程安全 if (tickets > 0) { System.out.println(threadName + "售出第" + tickets + "张票,优先级为" + priority); tickets--; } else { System.out.println(threadName + "没有票了!"); } } try { Thread.sleep(100); // 休眠100毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { TicketRunnable tr = new TicketRunnable(); Thread t1 = new Thread(tr); Thread t2 = new Thread(tr); t1.setName("Thread-1"); t2.setName("Thread-2"); t1.setPriority(1); // 设置线程1的优先级为1 t2.setPriority(5); // 设置线程2的优先级为5 t1.start(); t2.start(); } } ``` 程序的运行结果如下: ``` Thread-1售出第10张票,优先级为1 Thread-2售出第9张票,优先级为5 Thread-1售出第8张票,优先级为1 Thread-2售出第7张票,优先级为5 Thread-1售出第6张票,优先级为1 Thread-2售出第5张票,优先级为5 Thread-1售出第4张票,优先级为1 Thread-2售出第3张票,优先级为5 Thread-1售出第2张票,优先级为1 Thread-2售出第1张票,优先级为5 Thread-1没有票了! Thread-2没有票了! ``` 可以看到,两个线程交替执行,分别售出了不同的票数,而且线程1的优先级比线程2低,但是并没有影响到线程1的售票速度,因为程序的执行时间很短,线程的优先级可能并没有得到充分的体现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值