首页 > 编程语言 >java线程例题-类/对象/实例化/声明/多线程/同步

java线程例题-类/对象/实例化/声明/多线程/同步

时间:2022-10-23 03:11:25浏览次数:57  
标签:zh1 多线程 java Thread 线程 new 例题 yu public

package A_ShangGuiGu.Thread.ThreadTest;

import java.util.concurrent.locks.ReentrantLock;

////////////////////////////
class zhanghu{//账户类,定义一个余额属性。
private double yu_e = 0;//在账户里创建一个属性,用来存放余额。
public zhanghu (double yu_e){//在账户类中重写构造器,在调用这个类的时候需要传参数,然后在构造器里对参数进行操作。
this.yu_e = yu_e;
}
public void CunQian(double amt){//存钱方法,调用此方法时,对余额进行操作并输出。
if (amt>0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
yu_e+=amt;
System.out.println(Thread.currentThread().getName()+":存钱"+amt+"元成功!余额为"+yu_e);
}
}
}

////////////////////////////
class YongHuXianCheng implements Runnable{//用户线程
ReentrantLock lock1 = new ReentrantLock();//实例化一个lock锁的对象,如果是继承方式创建的线程,需要在lock1前面加上static
private zhanghu zh1;//实例化一个zhuanghu的对象zh1
public YongHuXianCheng (zhanghu zh1){//实例化后需要声明
this.zh1 = zh1;
}
@Override
public void run() {
for (int i = 0; i < 3; i++) {
lock1.lock();//手动调用锁方法
zh1.CunQian(1000);//调用账户类的CunQian方法。
lock1.unlock();//手动调用解锁方法
}
}
}

//////////////////////////////////
public class TreadTest02 {
public static void main(String[] args) {
zhanghu zh999 = new zhanghu(0);//创建一个账户对象,并赋予账户余额一个初始值。
YongHuXianCheng yonghuxiancheng = new YongHuXianCheng(zh999);//用线程类创建一个线程对象,new线程类后的()括号里的就是要操作的账户对象。
Thread t1 = new Thread(yonghuxiancheng);//Thread类调用上面用线程创建的对象来new两个用户对象。
Thread t2 = new Thread(yonghuxiancheng);
t1.setName("甲");//给线程命名
t2.setName("乙");
t1.start();//启动线程并运行线程的run()方法
t2.start();
}
}

标签:zh1,多线程,java,Thread,线程,new,例题,yu,public
From: https://www.cnblogs.com/zhazhawei906/p/16817801.html

相关文章

  • Java死锁演示和原理
    packageA_ShangGuiGu.Thread.ThreadTest;/***演示死锁问题*1.死锁的理解:不同的线程分别占用对方需要的同步资源,都在等待对方释放自己所需的另一个资源,就形成了死锁。......
  • 郁金香 -多线程创建
    #include<stdio.h>#include<Windows.h>//创建线程函数//开辟线程//BUG解决让这两个线程可以长期存在免得无法观察DWORDWINAPI线程函数1(LPVOIDarg){whil......
  • JavaScript 实现 -- 冒泡排序
    冒泡排序冒泡排序(BubbleSort)也叫气泡排序、泡沫排序,是一种比较简单的排序算法。它通过遍历数组,比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置,这样第......
  • JavaScript 实现 -- 选择排序
    选择排序选择排序是一种简单直观的排序算法。原理第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元......
  • JavaScript 实现 -- 希尔排序
    希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”(DiminishingIncrementSort),是插入排序的一种更高效的改进版本。希尔排序实际上就是分组的插入排序,希尔排序以步长......
  • Java关键字(四)——final
    对于Java中的final关键字,我们首先可以从字面意思上去理解,百度翻译显示如下:也就是说final英文意思表示是最后的,不可更改的。那么对应在Java中也是表达这样......
  • java 类与对象
    1.在定义变量时,java要求必须显示初始化变量。比如以下代码无法通过编译:publicclassTwst{publicstaticvoidmain(String[]wrgs){intvalue;System.out.println(......
  • 关于Java异常处理总结
    1.运行时异常:是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。可......
  • JAVA高级编程知识总结
    该知识总结(不完整)观看于b站up主Java视频链接:https://www.bilibili.com/video/BV135411w7Bp一、常用的API1.API中基本数据类型的包装类publicstaticvoidmain(S......
  • 03Java流程控制
    1、用户交互ScannerScanners=newScanner(System.in);//通过Scanner类的next()和nextLine()方法获取输入的字符串;//在读取前我们一般需要使用hasNext()与hasNextLine(......