`
朽木一根
  • 浏览: 26255 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中线程共享数据

    博客分类:
  • Java
阅读更多
  ///-----------1   采用Runnable接口----------------------------
/*    采用Runnable接口  实现共享数据的锁(Synchronized)  输出结果:
老公取10元,剩余90
老公取10元,剩余80
老公取10元,剩余70
老公取10元,剩余60
老公取10元,剩余50
老婆取10元,剩余40
老婆取10元,剩余30
老婆取10元,剩余20
老婆取10元,剩余10
老婆取10元,剩余0
*  /// 不允许同时访问,如果不使用Synchronized  结果如下(注意依然是在采用Runnable接口实现的时候):
老公取10元,剩余90
老婆取10元,剩余80
老婆取10元,剩余60
老公取10元,剩余60
老婆取10元,剩余50
老公取10元,剩余40
老婆取10元,剩余20
老公取10元,剩余20
老公取10元,剩余10
老婆取10元,剩余0
                    //////同时访问共享数据 产生输出差错
*/
/* public class Test implements Runnable{
   public static int money=100;
    public synchronized void run(){
      for(int i=0;i<5;i++)
      {   this.money-=10;
      System.out.println(Thread.currentThread().getName()+"取10元,剩余"+money);
     
     
      try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
  }
    }
    public static void main(String[] args)
    {
    Test h=new Test();
    Thread th=new Thread(h);
    th.setName("老公");
    th.start();
   
    Thread th2=new Thread(h);
    th2.setName("老婆");
    th2.start();
    }
}*/

 
  /*
   * ----------2  使用extends Thread 类方法----------------------
   *
   * 结果显示(多运行几次 有其他问题 。。。 乱)
老公取10元,剩余90
老婆取10元,剩余80
老婆取10元,剩余70
老公取10元,剩余60
老公取10元,剩余50
老婆取10元,剩余40
老公取10元,剩余30
老婆取10元,剩余20
老婆取10元,剩余10
老公取10元,剩余0
////////////并没有起到加锁  使用Runnable还是更容易些


   */
public class Test extends Thread{
   private static int money=100;
    public synchronized void run(){
      for(int i=0;i<5;i++)
      {   this.money-=10;
      System.out.println(this.getName()+"取10元,剩余"+this.money);
     
     
      try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
  }
    }
    public static void main(String[] args)
    {
    Test h=new Test();
        h.setName("老公");
    h.start();
   
    Test h2=new Test();
    h2.setName("老婆");
    h2.start();
   
    }
}
  
分享到:
评论

相关推荐

    java多线程处理数据库数据

    在Java编程中,多线程处理是提升程序性能和效率的重要手段,特别是在处理大量数据库数据时。本主题将深入探讨如何使用Java的并发包(java.util.concurrent)来实现多线程对数据库数据的批量处理,包括增、删、改等...

    java多线程分页查询

    多线程是指在一个程序中包含多个可以并发执行的线程,这些线程共享相同的内存空间。通过合理利用多线程技术,可以显著提升程序的运行效率和响应速度。在Java中,可以通过继承`Thread`类或者实现`Runnable`接口来创建...

    java多线程_java多线程下变量共享_

    在Java中,线程共享变量可以通过两种方式实现:静态成员变量和实例成员变量。静态成员属于类,所有该类的实例都可以访问,因此在多线程环境下默认共享;实例成员变量则属于对象,每个线程都有自己独立的副本,除非...

    java多线程Demo

    在多线程环境下,如果一个变量被多个线程共享且只进行读写操作,可以使用volatile保证数据的一致性。 9. sleep(), yield(), interrupt(): - sleep()方法使当前线程暂停指定的时间,然后继续执行。 - yield()方法...

    java多线程进度条

    总之,实现Java多线程进度条涉及线程同步、共享数据更新以及UI更新的协调。理解这些核心概念,并根据具体需求选择合适的方法,是构建高效、用户友好进度条的关键。在ProgressTest这个示例项目中,你可能会找到更多...

    java多线程经典案例

    此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...

    针对于Executor框架,Java API,线程共享数据

    ### 针对Executor框架与线程共享数据的深入探讨 #### 1. Executor框架的重要性与优势 在Java并发编程领域中,Executor框架扮演着一个非常核心的角色。它为开发者提供了一个高效且易于使用的线程池管理方案。下面将...

    Java 模拟线程并发

    除了基本的线程创建,Java还提供了synchronized关键字用于线程同步,防止多个线程同时访问共享资源导致数据不一致。synchronized可以修饰方法或代码块,当一个线程正在执行synchronized代码时,其他线程必须等待。 ...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    JAVA多线程实现数据库之间的数据互导、连接池、及多表插入数据库功能

    - **连接池概念**:连接池预先初始化一定数量的数据库连接,供多个线程共享,避免频繁创建和销毁连接的开销。 - **常用连接池组件**:例如C3P0、Druid、HikariCP等,它们提供自动管理、监控、性能优化等功能。 - ...

    java多线程的讲解和实战

    - 同步机制:为了防止多个线程访问同一资源时产生数据不一致的问题,Java提供了`synchronized`关键字,可以锁定代码块或整个方法,确保同一时刻只有一个线程执行。 - 等待/通知机制:`wait()`, `notify()`, `...

    Java多线程优化百万级数据

    4. **同步机制**:在多线程共享资源时,合理使用`synchronized`关键字、`Lock`接口(如`ReentrantLock`)以及`volatile`关键字,确保数据一致性并避免竞态条件。 5. **I/O优化**:对于数据库操作,可以使用JDBC...

    Java多线程机制(讲述java里面与多线程有关的函数)

    线程代表了程序中的执行流,可以在不同的线程之间切换以共享CPU时间。线程的状态包括新建、运行、中断和死亡。线程的生命周期始于新建,通过调用start()方法进入就绪状态,然后可能进入运行、阻塞或等待,最后在run...

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    1. **线程与进程**:线程是进程内的一个执行单元,多个线程共享进程的内存空间和资源,而进程是操作系统分配资源的基本单位,每个进程拥有独立的内存区域。 2. **线程模型**:Java中的线程由虚拟CPU(封装在`java....

    Java多线程编程实战指南-核心篇

    《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...

    使用Java多线程共享数据结构需注意的几个问题.pdf

    #资源达人分享计划#

    Java 多线程 PPT

    创建Java线程主要有两种方式: 1. 继承Thread类:创建Thread的子类并重写run()方法,然后通过调用start()方法启动线程。 2. 实现Runnable接口:创建一个实现了Runnable接口的类,实现run()方法,然后将该类的实例...

    汪文君JAVA多线程编程实战(完整不加密)

    Java内存模型(JMM)也是书中重要的内容,它解释了如何保证多线程环境下的数据一致性。 汪文君老师在讲解理论知识的同时,提供了丰富的实战案例,帮助读者将所学应用到实际项目中。这些案例涵盖了从简单的并发任务...

    Java 线程间数据交换的疑惑

    这篇博客“Java线程间数据交换的疑惑”可能探讨了在并发编程中如何有效地共享和同步数据。`volatile`关键字是Java中用于实现线程间通信的一个重要工具,它在多线程环境下起着关键的作用。 首先,我们要理解`...

    JAVA多线程编程技术PDF

    其次,线程同步是多线程编程中的关键部分,以防止数据竞争和不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口(如ReentrantLock)以及volatile关键字。synchronized用于控制对共享资源的访问,确保...

Global site tag (gtag.js) - Google Analytics