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();
 }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
线程
多线程共享变量、java多线程共享变量、线程共享变量、python多线程共享变量、c 多线程共享变量,以便于您获取更多的相关知识。

时间: 2024-10-27 18:33:56

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

基于Java的Spring框架来操作FreeMarker模板的示例_java

1.通过String来创建模版对象,并执行插值处理  import freemarker.template.Template; import java.io.OutputStreamWriter; import java.io.StringReader; import java.util.HashMap; import java.util.Map; /** * Freemarker最简单的例子 * * @author leizhimin 11-11-17 上午10:32 */ public cl

java HashMap通过value反查key的代码示例_java

复制代码 代码如下: import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapValueGetKey {  public static void main(String[] args) {    Map map = new HashMap<>();    map.put(1,&qu

Java实现冒泡排序与双向冒泡排序算法的代码示例_java

冒泡排序:就是按索引逐次比较相邻的两个元素,如果大于/小于(取决于需要升序排还是降序排),则置换,否则不做改变 这样一轮下来,比较了n-1次,n等于元素的个数:n-2, n-3 ... 一直到最后一轮,比较了1次 所以比较次数为递减:从n-1 到 1 那么总的比较次数为:1+2+3+...+(n-1),  以等差公式计算:(1+n-1)/2*(n-1) ==> n/2*(n-1) ==> (n^2-n) * 0.5 用大O表示算法的时间复杂度:O(n^2) ,  忽略了系数0.5和常数-n p

Java求素数和最大公约数的简单代码示例_java

Java小例子:求素数 素数(质数)指的是不能被分解的数,除了 1 和它本身之外就没有其它数能够整除.这里是一个小例子,说明如何求取十万以内的所有素数.   素数的分布没有规律可言,所以要检验一个数是不是素数,就必须将它同所有小于它的数作除法.不过有一个简便的方法,就是不需要检验所有小于它的数,而只要检验所有小于它的素数.如果所有小于它的素数都不能将其整除,那么它就是素数. public class Primes { public static void main(String[] args)

捕获Java线程池执行任务抛出的异常

捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { public abstract void run(); } 那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了? 通常java.lang.Thread对象运行设置一个默认的异常处理方法: java.lang.Thread.setDefaultUncaughtExceptionH

效果-java线程问题(是否可将部分代码设置在后台运行一段时间)

问题描述 java线程问题(是否可将部分代码设置在后台运行一段时间) 我想要的效果是我在下载文件时显示下载进度条, 并在下载完成后弹出提示框询问是否安装! 实际上是一开始下载时询问的提示框就和进度条一起出现了, 并且进度条显示到30%多的时候会突然降为0, 然后一段时间后再增加,所以进度条总是无法显示到100% 解决方案 你把界面和下载线程分开就好了,然后通过线程向外面传参数 解决方案二: 这是我积累的一些java项目源码 你可以参考参考 不过有点基础http://download.csdn.n

Java编程中静态内部类与同步类的写法示例_java

java静态内部类 将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致.不过其细节方面仍然有很大的不同.具体来说,主要有如下几个地方要引起各位程序开发人员的注意.     (一)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的.也就是说,在非静态内部类中不可以声明静态成员.     (二)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是

Java线程中sleep和wait的区别详细介绍_java

Java中的多线程是一种抢占式的机制,而不是分时机制.抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行. 共同点: 1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回. 2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException. 如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法.如果此刻线程B正在wait/sleep/

Java线程编程中Thread类的基础学习教程_java

一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解. 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time waiting.waiting.消亡(dead). 当需要新起一个线程来执行某个子任务时,就创建了一个线程.但是线程创建之后,不会立即进入就绪状态,因为线程的运行需要一些条件(比如内