java多线程实例程序实现与思想
写程序之前要了解两个概念
1.什么是进程
2.什么是线程
搞清楚这两个概念之后 才能写好一个合适而不会太抽象的程序
对进程和线程的理解见链接:
https://blog.csdn.net/new_teacher/article/details/51469241
https://www.cnblogs.com/aaronthon/p/9824396.html
那么理解了概念之后 如何写程序?
以银行取钱为例:
两个人有一个相同的账户->这个账户存储在银行->去银行取钱
个人理解:
银行是进程 客户是线程 取钱这个动作是基于客户所拥有的账户来实现的
在此参考了以下代码:
https://blog.csdn.net/u010988549/article/details/79158121
实现:
public class Bank {
String ACname;
double money;
public synchronized void withdraw(double getMoney)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setMoney(this.getMoney()-getMoney);
System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,当前余额为: "+this.getMoney()+" 元");
}
}
public class Person implements Runnable{
Bank bank;
public Person(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
this.bank.withdraw(1000);
}
}
我的心得见注释:
public static void main(String[] args){
Bank bank1=new Bank("frank",10000);//作为进程 有一块共享资源
Person person=new Person(bank1);//通过共享资源来建立共享对象 通过共享对象来建立线程
//线程通过对象来使用资源 从而建立run方法
Thread t1=new Thread(person,"father");
Thread t2=new Thread(person,"son");
t1.start();
t2.start();
}
同样道理:
以窗口售票为例:
车站有共同的车票->车站有不同的窗口来售票
车站是进程 车票是共享资源 不同的窗口是线程
而窗口共有的是什么呢 是票对吧 票在哪 在车站
代码如下:
public class Station {
int tickets;
public synchronized void sell(int buyTickets)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(this.getTickets()>0)
{
this.setTickets(this.getTickets()-buyTickets);
System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + this.getTickets());
}
}
}
public class SaleWindows implements Runnable {
Station station;
int number;
@Override
public void run() {
station.sell(1);
}
}
public static void main(String[] args){
Station station=new Station(10);
SaleWindows window1=new SaleWindows(station,1);//不同窗口
SaleWindows window2=new SaleWindows(station,2);
Thread t1=new Thread(window1,String.valueOf(window1.getNumber()));
Thread t2=new Thread(window2,String.valueOf(window2.getNumber()));
t1.start();
t2.start();
}
以上为写程序的一点感悟
java多线程实例程序实现与思想的更多相关文章
- Java多线程-实例解析
Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...
- java多线程实例
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.concurr ...
- java多线程实例(2)
public class ThreadDemo05 { public static void main(String args[]) { // 四个售票点应该控制同一个资源 Demo d = new ...
- java 多线程总结篇4——锁机制
在开发Java多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制.Java提供了多种多线程锁机制的实现方式,常见的有synchronized.ReentrantLock.Semaphore. ...
- JAVA多线程之生产者 消费者模式 妈妈做面包案例
创建四个类 1.面包类 锅里只可以放10个面包 ---装面包的容器2.厨房 kitchen 生产面包 和消费面包 最多生产100个面包3.生产者4消费者5.测试类 多线程经典案例 import ja ...
- JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口
JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一. ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- 用Java实现多线程服务器程序
一.Java中的服务器程序与多线程 在Java之前,没有一种主流编程语言能够提供对高级网络编程的固有支持.在其他语言环境中,实现网络程序往往需要深入依赖于操作平台的网络API的技术中去,而Java提供 ...
- java多线程编程实例
[转]这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下. 1.三个售票窗口同时出售20张票程序分析: ...
随机推荐
- C++ 模板和泛型编程(掌握Vector等容器的使用)
1. 泛型 泛型在我的理解里,就是可以泛化到多种基本的数据类型,例如整数.浮点数.字符和布尔类型以及自己定义的结构体.而容器就是提供能够填充任意类型的数据的数据结构.例如vector就很类似于pyth ...
- 虚拟机安装Centos7.5详细教程
VMware15.5虚拟机安装CentOS7.5详细教程 (前言)软件下载 需要VMware15.5软件和密匙的小伙伴可以从此地址下载:https://pan.baidu.com/s/1A8H ...
- angr原理与实践(一)——原理
1本文系原创,转载请说明出处 关注微信公众号 信安科研人,获取更多的原创安全资讯 编辑 网上已经有很多介绍angr的官方文档的博客,但是怎么去用angr做一次有意义且成就感满满的分析的教程很少 ...
- 5-8 Resource 静态资源服务器
静态资源服务器 什么是静态资源服务器 我们无论做什么项目,都会有一些页面中需要显示的静态资源,例如图片,视频文档等 我们一般会创建一个单独的项目,这个项目中保存静态资源 其他项目可以通过我们保存资源的 ...
- Solution -「CF645F」Cowslip Collections
设 \(f(i)\) 表示大小为 \(k\),\(\gcd\) 为 \(i\) 的方案数.\(F(i)\) 表示大小为 \(k\),\(\gcd\) 为 \(i\) 的倍数的方案数. 不难看出:\(F ...
- 基础数学知识 / Math(updating)
埃氏筛:朴素筛法求素数,o(nloglogn) int prime[N], tot; bool st[N]; // true:not prime, false:is prime void get_pr ...
- 配置 Druid 数据源及密码加密-SpringBoot 2.7 实战基础
在SpringBoot中配置 Druid 数据源及密码加密的方法 前文集成 MyBatis Plus,实现了一组增删改查接口.在启动服务时,从控制台中可以看出 Spring Boot 默认使用 Hik ...
- 抖音web端 s_v_web_id 参数生成分析与实现
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 抖音web端 s_v_web_id 参数 ...
- react环境搭建及文件配置
webpack简介 构建工具(基于Nodejs)node(v16)前端工程化. 环境搭建 创建一个空的package.json npm init webpack核心包(提供了API,插件) npm i ...
- 节后复工,Apache DolphinScheduler喜迎7位新Committer
Apache DolphinScheduler(Incubating)社区在节后上周第一周就迎来了好消息,经过 Apache DolphinScheduler PPMC 们的推荐和投票,我们高兴的宣布 ...