Java线程重复执行以及操作共享变量的代码示例
程序员文章站
2024-03-31 20:12:52
1.题目:主线程执行10次,子线程执行10次,此过程重复50次
代码:
package com.thread.test;
/*
* function:...
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 多态性详解及常见面试题