Java線程重復(fù)執(zhí)行以及操作共享變量的代碼示例
更新時(shí)間:2015年12月08日 15:02:43 投稿:goldensun
這篇文章主要介紹了Java中對(duì)線程重復(fù)執(zhí)行以及操作共享變量的代碼示例,來(lái)自于Java面試題目的練習(xí)整理,需要的朋友可以參考下
1.題目:主線程執(zhí)行10次,子線程執(zhí)行10次,此過(guò)程重復(fù)50次
代碼:
package com.Thread.test;
/*
* function:主線程執(zhí)行10次,子線程執(zhí)行10次,
* 此過(guò)程重復(fù)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.四個(gè)線程,共享一個(gè)變量j,其中兩個(gè)線程對(duì)j加1,兩個(gè)線程對(duì)j減1。
代碼如下:
package com.Thread.test;
//實(shí)現(xiàn)4個(gè)線程,兩個(gè)線程加1,兩個(gè)線程減1
public class Demo1 {
private static int j=0;
private A a = new A();
//構(gòu)造函數(shù)
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()+"對(duì)j加1,目前j="+Demo1.j);
}
public synchronized void delete1() {
j--;
System.out.println(Thread.currentThread().getName()+"對(duì)j減1,目前j="+Demo1.j);
}
}
//用于測(cè)試的主函數(shù)
public static void main(String[] args) {
Demo1 demo = new Demo1();
}
}
相關(guān)文章
Maven將代碼及依賴打成一個(gè)Jar包的方式詳解(最新推薦)
這篇文章主要介紹了Maven將代碼及依賴打成一個(gè)Jar包的方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
SpringBoot注解篇之@Resource與@Autowired的使用區(qū)別
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中進(jìn)行依賴注入的注解,那么你知道他們有什么區(qū)別嗎,本文就來(lái)介紹一下2023-12-12
聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制
這篇文章主要介紹了聊一聊SpringBoot服務(wù)監(jiān)控機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
java子類繼承父類實(shí)例-披薩的選擇實(shí)現(xiàn)代碼
這篇文章主要介紹了java子類繼承父類實(shí)例-披薩的選擇實(shí)現(xiàn)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Java兩種方式實(shí)現(xiàn)動(dòng)態(tài)代理
Java 在 java.lang.reflect 包中有自己的代理支持,該類(Proxy.java)用于動(dòng)態(tài)生成代理類,只需傳入目標(biāo)接口、目標(biāo)接口的類加載器以及 InvocationHandler 便可為目標(biāo)接口生成代理類及代理對(duì)象。我們稱這個(gè)Java技術(shù)為:動(dòng)態(tài)代理2020-10-10

