Java高级特性多线程练习

简介: Java高级特性多线程练习

进程:

进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。


线程:

线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。


简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程

例一:


需求说明:张三和妻子各拥有一张银行卡和存折,可以对同一个银行账户进行存取款的操作,请使用多线程及同步方法模拟张三和妻子同时取款的过程。要求使用同步方法和同步代码块两种方式实现


分析:

定义Account类表示银行帐户 定义两个线程分别实现张三和妻子取款的操作


20190917225450549.png


package com.vp.day06.demo01;
public class Bank implements Runnable {
    int money = 500;
    @Override
    public void run() {
        while (true) {
            if (money == 0) {
                break;
            }
            sale();
        }
    }
    public synchronized void sale() {
        if (money > 0) {
            System.out.println(Thread.currentThread().getName() + "准备取款!");
            System.out.println(Thread.currentThread().getName() + "取款完毕!");
            money -= 100;
            try {
                Thread.sleep(500);
            } catch (Exception e) {
            }
        } else {
            for (int i = 0; i < 5; i++) {
                System.out.println("余额不足以支付" + Thread.currentThread().getName() + "的取款,余额为0");
            }
        }
    }
    private int money = 500; // 存款500
    private int num = 0; // 存款不足的次数
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) { // 取款5次
            synchronized (this) {
                if (num >= 5) {
                    break;
                }
                if (money > 0) { // 存款够的时候
                    System.out.println(Thread.currentThread().getName() + "准备取款");
                    System.out.println(Thread.currentThread().getName() + "完成取款");
                } else if (money <= 0) { // 存款不足时
                    num++;
                    System.out.println("余额不足以支付" + Thread.currentThread().getName() + "的取款,余额为0");
                }
                money -= 100;
                try {
                    Thread.sleep(500); // 模拟取款时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
目录
相关文章
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
141 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
158 1
|
2月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java API 开发者
99 0
Java 数据库 Spring
136 0
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
220 16
|
3月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。
|
3月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
4月前
|
Java API 调度
从阻塞到畅通:Java虚拟线程开启并发新纪元
从阻塞到畅通:Java虚拟线程开启并发新纪元
353 83
下一篇
oss云网关配置