面试题,子线程10次子线程2执行20次与主线程100次来回循环执行50次

//	面试题,子线程2执行10次子线程2执行20次 与主线程100次来回循环执行50次
public class interview {

	public static void main(String[] args) {
		final Business b = new Business();
		new Thread(new Runnable(){
			@Override
			public void run() {
				for (int i = 1; i <= 50; i++) {
						b.sub2(i);
				}
			}

		}).start();

		new Thread(new Runnable(){
			@Override
			public void run() {
				for (int i = 1; i <= 50; i++) {
					b.sub3(i);
				}
			}

		}).start();

		for (int i = 1; i <= 50; i++) {
				b.main(i);
		}
	}
}
class Business{
	private int order=1;
	Lock lock = new ReentrantLock();
	Condition con1 = lock.newCondition();
	Condition con2 = lock.newCondition();
	Condition con3 = lock.newCondition();
	public void sub2(int i){
		lock.lock();
		try {
			while (order != 2) {
				try {
					con2.await();
				} catch (InterruptedException e) {

					e.printStackTrace();
				}
			}
			for (int j = 1; j <= 10; j++) {
				System.out.println("sub2 Thread is sequence of " + j
						+ "..lamp of " + i);
			}
			System.out.println("/..................");
			order = 3;
			con3.signal();
		} finally{
			lock.unlock();
		}
	}
	public void sub3(int i){
		lock.lock();
		try {
			while (order != 3) {
				try {
					con3.await();
				} catch (InterruptedException e) {

					e.printStackTrace();
				}
			}
			for (int j = 1; j <= 20; j++) {
				System.out.println("sub3 Thread is sequence of " + j
						+ "..lamp of " + i);
			}
			System.out.println("/..................");
			order = 1;
			con1.signal();
		} finally{
			lock.unlock();
		}
	}
	public void main(int i){
		lock.lock();
		try {
			while (order != 1) {
				try {
					con1.await();
				} catch (InterruptedException e) {

					e.printStackTrace();
				}
			}
			for (int j = 1; j <= 100; j++) {
				System.out.println("main Thread is sequence of " + j
						+ "..lamp of " + i);
			}
			order = 2;
			System.out.println("........................");
			con2.signal();
		} finally {
			lock.unlock();
		}
	}
}

面试题,子线程10次子线程2执行20次与主线程100次来回循环执行50次

时间: 2024-10-05 09:17:11

面试题,子线程10次子线程2执行20次与主线程100次来回循环执行50次的相关文章

多线程:子线程执行过程中调用主线程

直接在子线程中调用方法,线程的ID为3,通过Post则为1 执行结果: 2018-09-13 11:21:11:1735 : 主线程:1 2018-09-13 11:21:16:0583 : 子线程:3 2018-09-13 11:21:16:0739 : ShowForm:1发送失败! 2018-09-13 11:21:16:1051 : ShowForm:3发送失败! public class TestClass { private SynchronizationContext mainTh

iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用

目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 多线程的四种解决方案:pthread,NSThread,GCD,NSOperation 线程安全问题 NSThread的使用 GCD的理解与使用 NSOperation的理解与使用 Demo在这里:WHMultiThreadDemo Demo的运行gif图如下: 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位,是操作

Android ActivityThread(主线程或UI线程)简介

1. ActivityThread功能 它管理应用进程的主线程的执行(相当于普通Java程序的main入口函数),并根据AMS的要求(通过IApplicationThread接口,AMS为Client.ActivityThread.ApplicationThread为Server)负责调度和执行activities.broadcasts和其它操作. 在Android系统中,在默认情况下,一个应用程序内的各个组件(如Activity.BroadcastReceiver.Service)都会在同一个

Android更新主线程UI的两种方式handler与runOnUiThread()

在android开发过程中,耗时操作我们会放在子线程中去执行,而更新UI是要主线程(也叫做:UI线程)来更新的,自然会遇到如何更新主线程UI的问题.如果在主线程之外的线程中直接更新页面显示常会报错.抛出异常:android.view.ViewRoot.CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 为什么要有handler机制?h

如何在Android中判断某个线程是否是主线程

转帖: http://droidyue.com/blog/2014/07/12/check-main-thread-in-android-chinese-edition/ 如何在Android中判断某个线程是否是主线程?对于这个问题,你可能说根据线程的名字,当然这个可以解决问题,但是这样是最可靠的么?万一某天Google一下子将线程的名字改称其他神马东西呢. 方法揭晓 下面的方法是最可靠的解决方案. public static boolean isInMainThread(){ return L

子线程循环 10 次,接着主线程循环 100,接着又回到子线程循环 10 次, 接着再回到主线程又循环 100,如此循环 50 次

子线程循环 10 次,接着主线程循环 100,接着又回到子线程循环 10 次, 接着再回到主线程又循环 100,如此循环 50 次 1 package TestThread; 2 3 /** 4 * 子线程循环 10 次, 接着主线程循环 100, 接着又回到子线程循环 10 次, 接着再回到主线程又循环 100, 如此循环 50 次 5 * 6 * @author trfizeng 7 * 8 */ 9 public class ThreadTest { 10 static int round

多线程 创建子父线程 保证一件事 子线程执行三次后 父线程执行5次 循环10次

package Thread; /** * 创建子父线程 保证一件事 子线程执行三次后 父线程执行5次 循环10次 * 父线程main线程则为Console台项目的主线程 * 在main线程中调用了start线程则为子线程 * */ public class FatherAndSonTest { public static void main(String[] args) { final FatherAndSon fs = new FatherAndSon(); new Thread(new R

iOS中NSThread(主线程,子线程)

#import "AppDelegate.h" @interface AppDelegate () { NSInteger _totalTickests; } @property (nonatomic, retain) NSLock *lock; @end @implementation AppDelegate - (void)task1 { NSLog(@"当前线程:%@,是否是主线程:%d",[NSThread currentThread],[[NSThread

WinForm 子线程修改主线程(UI线程)

原文http://www.cnblogs.com/SkySoot/archive/2012/03/14/2396552.html 我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: 1 public partial class TestThread : Form 2 { 3 public TestThread() 4 { 5 InitializeComponent(); 6 } 7 8 Thread thread; 9 10 void SetText(