线程同步的使用(二)

使用字符串作为线程对象锁

使用线程在执行synchronized时都会同步。

语法结构:

synchronized("字符串"){
    //同步代码
}
/**
 * 定义程序员类
 */
class Programmer {
    private String name;

    public Programmer(String name){
        this.name = name;
    }

    /**
     * 打开电脑
     */
    synchronized public void computer(){
        try{
            System.out.println(this.name + "接通电源");
            Thread.sleep(500);
            System.out.println(this.name + "电脑开机");
            Thread.sleep(500);
            System.out.println(this.name + "系统启动");
            Thread.sleep(500);
            System.out.println(this.name + "启动成功");
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }

    /**
     * 编码
     */
    synchronized public void coding(){
        try{
            System.out.println(this.name + "双击idea");
            Thread.sleep(500);
            System.out.println(this.name + "idea启动");
            Thread.sleep(500);
            System.out.println(this.name + "开始写代码");
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }

    /**
     * 去卫生间
     */
    public void wc(){
        synchronized("suibian"){
            try{
                System.out.println(this.name + "开门");
                Thread.sleep(500);
                System.out.println(this.name + "上厕所");
                Thread.sleep(500);
                System.out.println(this.name + "冲水");
                Thread.sleep(500);
                System.out.println(this.name + "关门");
            }catch(InterruptedException e){
                e.printStackTrace();
            }
        }
    }
}

/**
 * 打开电脑的工作线程
 */
class Working1 extends Thread{
    private Programmer p;

    public working1(Programmer p){
        this.p = p;
    }

    @Override
    public void run(){
        this.p.computer();
    }
}

/**
 * 编写代码的工作线程
 */
class Working2 extends Thread{
    priavte Programmer p;
    
    public working2(Programmer p){
        this.p = p;
    }

    @Override
    public void run(){
        this.p = coding();
    }
}

/**
 * 去卫生间的线程
 */
class WC extends Thread{
    private Programmer p;

    public WC(Programmer p){
        this.p = p;
    }

    @Override
    public void run(){
        this.p.wc();
    }
}

public class TestSyncThread{
    public static void main(String[] args){
        Programmer p = new Programmer("张三");
        Programmer p1 = new Programmer("李四");
        Programmer p2 = new Programmer("王五");
        new WC(p).start();
        new WC(p1).start();
        new WC(p2).start();
    }
}

相关推荐

  1. 线同步使用

    2024-07-15 17:20:05       18 阅读
  2. 线同步使用(一)

    2024-07-15 17:20:05       26 阅读
  3. 线同步四项原则

    2024-07-15 17:20:05       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 17:20:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 17:20:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 17:20:05       58 阅读
  4. Python语言-面向对象

    2024-07-15 17:20:05       69 阅读

热门阅读

  1. 了解动力转向油封

    2024-07-15 17:20:05       18 阅读
  2. Solon v2.8.5 发布

    2024-07-15 17:20:05       18 阅读
  3. Python中的 NumPy与Pandas库介绍

    2024-07-15 17:20:05       17 阅读
  4. GE DS200DCCAG4模块 控制器 处理器

    2024-07-15 17:20:05       18 阅读
  5. CentOS7 使用conda

    2024-07-15 17:20:05       24 阅读
  6. Packmen

    2024-07-15 17:20:05       27 阅读
  7. Python 相关问答

    2024-07-15 17:20:05       26 阅读
  8. 释放Cython的力量:解决PyCharm中加速问题的策略

    2024-07-15 17:20:05       20 阅读
  9. RTOS事件集的使用

    2024-07-15 17:20:05       21 阅读