首页 > 其他分享 >使用synchronized关键字来同步多个线程操作同一个文件

使用synchronized关键字来同步多个线程操作同一个文件

时间:2023-09-03 09:22:55浏览次数:29  
标签:文件 synchronized writer 关键字 线程 new FileWriter

使用synchronized关键字来同步多个线程操作同一个文件

import java.io.FileWriter;
import java.io.IOException;

public class FileSyncExample {
    private static Object file = new Object();

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (file) {
                    try {
                        FileWriter writer = new FileWriter("output.txt", true);
                        writer.write("Hello from thread 1\n");
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (file) {
                    try {
                        FileWriter writer = new FileWriter("output.txt", true);
                        writer.write("Hello from thread 2\n");
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        t1.start();
        t2.start();
        t1.join();
        t2.join();
    }
}

 

在这个例子中,我们创建了两个线程,它们都会尝试操作同一个文件(output.txt)。我们使用synchronized关键字来同步它们的操作。每个线程都会创建一个FileWriter对象,向文件中写入一条消息,并关闭流。由于同步的保证,只有在当前没有任何线程持有文件锁时,另一个线程才能获取锁并执行操作。这样可以确保多个线程不会同时写入文件,避免了数据不一致和文件损坏的问题。

 

#######################

标签:文件,synchronized,writer,关键字,线程,new,FileWriter
From: https://www.cnblogs.com/herd/p/17674585.html

相关文章

  • sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇
    转sleep、yield、join方法简介与用法sleep与wait区别多线程中篇1.sleep不会释放锁,不会释放锁,不会释放锁 所以对于sleep方法,要么自己醒来,要么被中断后也会醒来 yield也是静态方法,所以,也是针对于当前线程,当前线程,当前线程。  2.主线程main中调用启动线程(调用start),......
  • 线程的生命周期和状态?
    Java线程的状态及转换线程状态的实质当我们说线程的状态时,说的就是一个变量的值。哪个变量?Thread类中的一个变量privatevolatileintthreadStatus=0;这个值是个整数,可以通过映射关系(VM.toThreadState)转换成一个枚举类publicenumState{NEW,RUNNABLE,BL......
  • 多线程学习第四篇
    4、线程同步机制并发:同一对象被多个线程同时操作(抢票)线程同步是一个等待机制,多个需要同时访问次对象的线程进入这个对象的等待池形成队列,等待前一个线程使用完毕,下一个线程才能使用。形成线程安全的条件:队列和锁由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也......
  • 多线程学习第五篇
    5、线程协作(线程通信)应用场景:生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。如果仓库中没有产品,则将生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。如果仓库中放有产品,则消费者可以......
  • 多线程学习第三篇
    3、线程状态线程五大状态:创建状态:通过new创建线程就绪状态:通过start()启动线程进入就绪状态阻塞状态:通过CPU调配进入运行状态运行状态:在运行状态时,可以进行如sleep,wait等方法使线程进入阻塞状态死亡状态:自然执行完毕、外部干涉终止线程具体流程为:3.1、线程的常用......
  • 多线程第一篇(认识多线程)
    多线程任务,进程,线程,多线程Process:进程Thread:线程1、基本概念进程在操作系统中运行的程序就是进程。程序是指令和数据的有序集合,其本身没有任何运行的含义,是静态的。进程就是执行程序的一次执行过程,它是一个动态的概念式系统资源分配的单位通常再一个进程中可......
  • 每周总结-第八周 多线程
    多线程概述:充分利用计算机资源,同时执行不同的操作1.计算机操作系统进程和线程2.使用java来完成多线程的编码3.线程中的常用方法4.线程同步(重点)5.死锁6.生产者消费者模型异步操作系统简介操作系统:本质上就是一个运行在一堆硬件上的巨型软件没有操作系统的话,程序想要操控......
  • 多线程|饿汉模式和懒汉模式
    单例模式是只有单个实例的模式,应用在只能有一个实例的场景中。单例模式有很多种,这里介绍饿汉模式和懒汉模式两个单例。一、饿汉模式“饿汉”是一种形象的描述,“饿汉”看到吃的就非常急切,把这种急切的形象类比到Java中就是在类加载阶段就把实例创建出来了。什么是类加载?Java代码......
  • HashMap线程安全(含答案)
    HashMap线程安全(含答案)Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。看下面两个场景:1、当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不安全的问题了。2、当用在单例对象成员变量的时候呢?这时候多个线程过来访......
  • go并发编程系列五:线程分组及控制线程的合作执行
    背景:线程的合作执行,体现的是团结协作,应该是比较理想的状态,如果人人都能够少一些算计、多一点互帮互助,那该有多好啊?班主任不是资本家,班级更应该提倡团队精神,学生之间不应该竞争,应该互相协作!这篇文章以团结协作为出发点,讲解线程的合作执行。 TRANSLATEwithxEnglish......