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();
}
}
相关文章
Maven将代码及依赖打成一个Jar包的方式详解(最新推荐)
这篇文章主要介绍了Maven将代码及依赖打成一个Jar包的方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-05-05
SpringBoot注解篇之@Resource与@Autowired的使用区别
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中进行依赖注入的注解,那么你知道他们有什么区别吗,本文就来介绍一下2023-12-12


最新评论