Java线程重复执行以及操作共享变量的代码示例

 更新时间:2015年12月08日 15:02:43   投稿:goldensun  
这篇文章主要介绍了Java中对线程重复执行以及操作共享变量的代码示例,来自于Java面试题目的练习整理,需要的朋友可以参考下

1.题目:主线程执行10次,子线程执行10次,此过程重复50次

代码:

package com.Thread.test;
/*
 * function:主线程执行10次,子线程执行10次,
 * 此过程重复50次
 */
public class ThreadProblem {

 public ThreadProblem() {
 
 final Business bus = new Business();
 new Thread(new Runnable() {
  
  public void run() {
  
  for(int j=0;j<50;j++) {
   
   bus.sub(j);
  }
  }
 }).start();
 
 for(int j=0;j<50;j++) {
  
  bus.main(j);
 }
 }
 class Business {
 
 private boolean tag=true;
 public synchronized void sub(int num) {
  
  if(!tag) {
  
  try {
   this.wait();
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
  for(int i=0;i<10;i++)
  {
  System.out.println("sub thread "+i+",loop "+num+".");
  }
  
  tag=false;
  notify();
 }
 
 public synchronized void main(int num) {
  
  if(tag) {
  
  try {
   this.wait();
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
  for(int i=0;i<10;i++) {
  
  System.out.println("main thread "+i+",loop "+num+".");
  }
  
  tag=true;
  notify();
 }
 }
 
 public static void main(String[] args) {
 
 ThreadProblem problem = new ThreadProblem();
 }
}


2.四个线程,共享一个变量j,其中两个线程对j加1,两个线程对j减1。

代码如下:

package com.Thread.test;
//实现4个线程,两个线程加1,两个线程减1
public class Demo1 {

 private static int j=0;
 private A a = new A();
 //构造函数
 public Demo1() {
 
 System.out.println("j的初始值为:"+j);
 for(int i=0;i<2;i++) {
  
  new Thread(new Runnable(){
  
  public void run() {
   
   for(int k=0;k<5;k++){
   a.add1();
   }
  }
  }).start();
  
  new Thread(new Runnable(){
  
  public void run() {
   
    for(int k=0;k<5;k++)
    {
   a.delete1();
    }
  }
  }).start();
 }
 }
 class A {
 
 public synchronized void add1() {
  
  j++;
  System.out.println(Thread.currentThread().getName()+"对j加1,目前j="+Demo1.j);
 }
 
    public synchronized void delete1() {
  
  j--;
  System.out.println(Thread.currentThread().getName()+"对j减1,目前j="+Demo1.j);
 }
 }
 
 //用于测试的主函数
 public static void main(String[] args) {
 
 Demo1 demo = new Demo1();
 }
}

相关文章

  • SpringBoot个性化启动Banner设置方法解析

    SpringBoot个性化启动Banner设置方法解析

    这篇文章主要介绍了SpringBoot个性化启动Banner设置方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • java中redissonClient 分布式锁的使用

    java中redissonClient 分布式锁的使用

    在集群的情况下,用户多次请求接口时,存入的内容可能会导致重复,这时候就可以使用分布式锁来限制,本文就来介绍一下java中redissonClient 分布式锁的使用,感兴趣的可以了解一下
    2024-03-03
  • nexus安装及配置图文教程

    nexus安装及配置图文教程

    Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等,文中有非常详细的图文介绍,对小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • 深入解析Java的Hibernate框架中的一对一关联映射

    深入解析Java的Hibernate框架中的一对一关联映射

    这篇文章主要介绍了Java的Hibernate框架的一对一关联映射,包括对一对一外联映射的讲解,需要的朋友可以参考下
    2016-01-01
  • Java对Excel表格的上传和下载处理方法

    Java对Excel表格的上传和下载处理方法

    这篇文章主要介绍了Java对Excel表格的上传和下载处理方法,需要的朋友可以参考下
    2017-08-08
  • JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现

    JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现

    这篇文章主要介绍了JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现的相关资料,需要的朋友可以参考下
    2016-03-03
  • Java中List列表去重有序和无序的6种方法

    Java中List列表去重有序和无序的6种方法

    在日常的业务开发中,会遇到List中的重复数据去除掉的场景,本文就来介绍一下Java中List列表去重有序和无序的6种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java实现Random随机数生成双色球号码

    Java实现Random随机数生成双色球号码

    使用Random类是Java中用于生成随机数的标准类,本文主要介绍了Java实现Random随机数生成双色球号码,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Spring Boot整合Swagger2的完整步骤详解

    Spring Boot整合Swagger2的完整步骤详解

    这篇文章主要给大家介绍了关于Spring Boot整合Swagger2的完整步骤,文中通过示例代码将整合的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Spring集成MyBatis框架

    Spring集成MyBatis框架

    本文主要介绍了Spring集成MyBatis的配置和使用,项目基于Maven构建,连接Mysql数据库。下面跟着小编一起来看下吧
    2017-02-02

最新评论