java线程同步问题例题

本文探讨了Java中的线程同步问题,强调了保护数据完整性的重要性。介绍了同步代码块和同步方法的使用,并给出了两个具体的实战作业:一个是创建两个线程,一个随机打印100以内的整数,另一个监听键盘输入"Q";另一个涉及并发取款场景,确保两个用户在共享账户中不会超取或余额不足。
摘要由CSDN通过智能技术生成

定义:

  1. 在多线程编程,一些敏感的数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多只有一个线程访问,以保护数据的完整性。
  2. 线程同步,就是当有一个线程对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。

同步具体方法-Synchronized

  1. 同步代码块
    synchronized(对象){//得到对象的锁,才能操作同步代码块
        //需被同步的代码
    }
  2. synchronized还可以放在方法声明中,表示整个方法-为同步方法
    public synchronized void m(String name){
        //需被同步的代码
    }

作业1要求:

  1. 在main方法中启动两个线程
  2. 第一个线程循环随机打印100以内的整数
  3. 第二个进程从键盘读取了”Q“命令
package com.yuanhuajun.Homework;

import java.util.Scanner;

/**
 * @author Yhj
 * @date 2022/4/29 8:44
 * @project chapter17
 */


public class Homework01 {
   
    public static void main(String[] args) {
   
        T1 t1 = new T1();
        //这是将t1对象传到t2中,用以在t2进程中控制t1;如果用类变量来控制,不需要这样。
        T2 t2 = new T2(t1);
        Thread thread = new Thread(t2);
        //启动两个进程
        t1.start();
        thread.start();
    }
}


class T1 extends Thread {
   
    static Boolean flag = true;

    public static Boolean 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值