多线程编程中多个线程读写同一个共享数据需要采用什么方式读写?

多线程编程中多个线程读写同一个共享数据需要采用什么方式读写?,第1张

需要保证线程安全。

读写同肢液一内存值,会发生读不是最新的数据,也导致写覆盖了后的数据错误。

既然保持线程安全,继续用加“锁”。

加锁的目的就历锋物好比排队,比基野如:获得执行权力就执行,没有获得的就等待。所有线程的读写都进行顺序执行。

在多线程程序设计中,多个线程往往需要对部分资源进行共享,那么如何实现呢? 下面让我们分析一下。山宏Java中有两种方法可以实现线程,一种是继承Thread类并且覆盖run方法,一种是实现Runnable接口并覆盖run方法。所谓线程中的资源共享也就是多个线程对该资源只保存一份,而不是每个线程穗芹内都各自保存一份。记得在面向对象中曾经说过,若需要类中的对象共享某猜唯毕资源,可以把它定义成static的类方法或者是类变量,但是在线程中,当我们启动线程的时候,Java虚拟机就会调用线程中的run方法,而被覆盖的run不是static类型的,所以它不能访问static资源。此方法实效。 那么还有其他方法吗?让我们回忆下Java实现线程的方式有几种。1.继承Thread,覆盖run方法,利用start启动线程 2.实现Runnable接口,覆盖run方法,把覆盖Runnable接口后的类创建一份实例,把该实例传递给Thread(Runnable r),作为构造函数的参数。 从上面的分析我们可以知道,我们可以利用第二种方式实现多线程的资源共享,把资源保存在Runnable接口中,然后只创建一份实现了Runnable接口的类的实例传递个需要共享资源的线程就可以了。例如class ThreadTest implements Runnable{ ///共享资源 public void run() {//对共享资源的处理 }}MulThread mt=new MulThread()ThreadTest t=new ThreadTest()Thread t1=new Thread(t)Thread t2=new Thread(t)Thread t3=new Thread(t)t1.start()

public class Test1 {

public static void main(String args[]) {

//测试两个线程

WriterThread writerThread=new WriterThread()

writerThread.start()

ReaderThread readerThread=new ReaderThread()

readerThread.start()

}

}

//字节输入的线程

class WriterThread extends Thread{

//加上synchronized实现同步,就能达到线程安全岁哗世

public synchronized void run(){

File file=new File("c:/file.txt")

try {

FileWriter fileWriter = new FileWriter(file,true)//加上true就会在原有的基础上修改,而不会覆盖原来的

fileWriter.write("迦夜云书")

fileWriter.flush()

fileWriter.close()

} catch (IOException e) {

System.out.println("输入内容失败"乎肢)

e.printStackTrace()

}

}

}

//字节输出的线程

class ReaderThread extends Thread{

public synchronized void run(){

File file=new File("c:/file.txt")

try {

FileReader fileReader = new FileReader(file)

char content[]=new char[1024]

int len=0

while((len=fileReader.read(content))!=-1){

System.out.println(new String(content, 0,len))

}

fileReader.close()

} catch (Exception e) {

System.out.println("芦念读取内容失败")

e.printStackTrace()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12474282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存