中断: 线程实例.interrupt();
lock锁的使用
package com.jlong;
 
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
 
 
class User {
    public String name;
    public String sex;
 
    public boolean flag = false;
 
    public Lock lock = new ReentrantLock();
 
    public Condition conditionLock = lock.newCondition();
}
 
class InputThread extends Thread {
    private User user;
 
    public InputThread(User user) {
        this.user = user;
    }
 
    int cout = 0;
 
    @Override
    public void run() {
 
        while (true) {
//加锁
            user.lock.lock();
            if (user.flag) {
                try {
//线程等待
                    user.conditionLock.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            try {
                if (cout == 0) {
                    user.name = "jLong";
                    user.sex = "男";
                } else {
                    user.name = "燕子";
                    user.sex = "女";
                }
                cout = (cout + 1) % 2;
                user.flag = true;
//唤醒一个在 await()等待队列中的线程。与Object.notify()相似
                user.conditionLock.signal();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
//解锁
                user.lock.unlock();
            }
 
 
        }
    }
}
 
class OutputThread extends Thread {
 
 
    private User user;
 
    public OutputThread(User user) {
        this.user = user;
    }
 
    @Override
    public void run() {
        while (true) {
            user.lock.lock();
            if (!user.flag) {
                try {
                    user.conditionLock.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            try {
                System.out.println(user.name + "--" + user.sex);
                user.flag = false;
                user.conditionLock.signal();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                user.lock.unlock();
            }
 
 
        }
    }
}
 
public class ThreadDemo {
    public static void main(String[] args) {
        User user = new User();
        InputThread inputThread = new InputThread(user);
        OutputThread outputThread = new OutputThread(user);
        inputThread.start();
        outputThread.start();
    }
}
 
 

5.lock 锁的更多相关文章

  1. Lock锁的使用示例

    Lock锁是java5用来代替synchronized的一种面向对象的锁的方案 public class LockDemo { /** * Lock是用来替换synchronized, 优点是Lock ...

  2. Android(java)学习笔记69:JDK5之后的Lock锁的概述和使用

    1. Lock锁的概述: java.util.concurrent.locks,接口Lock 首先Lock是一个接口,Lock实现提供了比使用synchronized方法 和 同步代码块更为广泛的锁定 ...

  3. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  4. Lock锁_线程_线程域

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  5. (删)Java线程同步实现二:Lock锁和Condition

    在上篇文章(3.Java多线程总结系列:Java的线程同步实现)中,我们介绍了用synchronized关键字实现线程同步.但在Java中还有一种方式可以实现线程同步,那就是Lock锁. 一.同步锁 ...

  6. 转: 【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)

    简单使用Lock锁 Java5中引入了新的锁机制--Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lock接 ...

  7. 使用Lock锁生产者消费者模式

    package com.java.concurrent; import java.util.concurrent.locks.Condition; import java.util.concurren ...

  8. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  9. java并发编程的艺术——第五章总结(Lock锁与队列同步器)

    Lock锁 锁是用来控制多个线程访问共享资源的方式. 一般来说一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁). 在Lock接口出现前,java使用synchr ...

  10. Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

随机推荐

  1. oracle 查询 10题

    说明:表数据来自oracle 初始用户之一scott里面的三个初始表:emp,dept,salgrade --1.查询员工表中工资最高的雇员的员工号.员工姓名.工资和部门号. select empno ...

  2. flutter报错--ProcessException: Process... gradlew.bat ...exited abnormally

    在 VScode 中 debug flutter 是遇到如下问题: ProcessException: Process "G:\demo\flutter\hello_word\android ...

  3. requests模块 简单使用

    目录 requests模块 简单使用 Anaconda简单了解 简单了解 requests模块 使用requests模块 爬取搜狗首页源码数据 实现一个简易的网页采集器 解决乱码问题 解决UA检测问题 ...

  4. Win10同时安装office2016和visio2016说明

    前言 无论是先安装office2016还是visio2016,均不能成功. 而office2016和visio2016的镜像文件是一样的,只是名称不一样,只需下载其一即可. 具体参考链接 https: ...

  5. 小程序 wx.getSystemInfoSync 获取 windowHeight 不准确的问题

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. wx.getSystemInfo(OBJECT) 获取系统信息. OBJECT参数说明: 参数 ...

  6. Docker -compose install Harbor

    Docker-compose Harbor install Docker install Yum install docker-compose 首先安装 yum configuation 管理工具 [ ...

  7. linu学习记录--初学linux中的几个基本命令以及比较关键的man指令

    import chardet chardet.detect() #传入参数可以输出查看参数的对应编码 首先是用decode将对象编码转换成unicode,然后用encode将对象编码转换成输出所需,u ...

  8. 数据库系统load飙高问题解决思路

    工作过程中有时候会接收到数据库服务器器load 飙高的报警,比如:  load1 15.25 base: 8.52,collect time:2014-08-30 如何处理load 异常飙高的报警呢? ...

  9. python中的lambda、map、reduce、filter

    filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决 ...

  10. 用 Python 加密文件

    生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而 ...