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张票程序分析: ...
随机推荐
- 分布式事务(Seata)原理 详解篇,建议收藏
前言 在之前的系列中,我们讲解了关于Seata基本介绍和实际应用,今天带来的这篇,就给大家分析一下Seata的源码是如何一步一步实现的.读源码的时候我们需要俯瞰起全貌,不要去扣一个一个的细节,这样我们 ...
- 【docker专栏4】使用docker安装nginx提供web服务
一般学习一项技术,会先用一个最简单的例子或最典型的例子来向大家讲解入门内容,所以此文为大家介绍使用docker安装nginx容器服务.从基础使用的角度来讲,此文几乎涵盖了docker最核心的内容:镜像 ...
- JavaWEB-02-MySQL高级
内容 约束 多表关系 一对一 一对多 多对多 多表联查 ==多表联查== 事务 1. 约束 1.1 概念 限制,在数据库中是对某一列(多列)进行限制. 对表中的数据进行限定,保证正确性.有效性.完整性 ...
- gerrit系统如何配置访问控制
. 版本:v0.3 作者:河东西望 日期:2022-7-13 . 目录 1 关键概念 2 需求场景 3 配置策略 gerrit系统的上手使用有两个难点: 部署repo仓库. 配置访问控制. 想要上手使 ...
- redis 集群 slots are covered by nodes.
原因数据数据损坏.需要修复 1.检测 redis-cli --cluster check 127.0.0.1:7000 2.检测结果 slots are covered by nodes3.进行修复 ...
- Solution -「CF1373G」Pawns
小清新线段树题(( 每个位置的边只能向靠右的三个方向走,最后要走到一条基准线上.即对于一个点 \((x, y)\),它最后应该落在 \((k, y + |k - x|)\). 士兵可以一个一个进行移动 ...
- Centos7中配置NIS:用户账号管理
NIS:网络信息服务 Linux系统中用户按地域分两类:本地用户,远程用户(NIS.LDAP.AD)模式:C/S模式 ypbind是定义NIS服务器的客户端进程,一旦确定了服务器位置,客户端绑定到了服 ...
- C#通过完整的例子,Get常用的2个套路,理解抽象方法,虚方法,接口,事件
一.理解:抽象方法,虚方法,接口,事件 描述: 1.定义一个抽象父类"People": 要求: 1>3个属性:名字,性别,年龄: 2>一个普通方法"说话&qu ...
- angular变化检测OnPush策略需要注意的几个问题
OnPush组件内部触发的事件(包括viewChild)会引起组件的一次markForCheck Detached组件内部触发的事件不会引起组件的变化检测 OnPush组件的contentChild依 ...
- 在Mac Os(苹果)上用手机抓包软件Charles抓取微信小程序中的高清无水印视频
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_118 手机抓包是一名测试工程师常备的技能,比如我想查看一个接口请求的参数.返回值,还有移动设备上的http请求.https请求,这 ...