线程:子线程先循环十次,主线程在循环20次,再子线程循环十次,主线程循环20次,如此循环50次


子线程先循环十次,主线程在循环20次,再子线程循环十次,主线程循环20次,如此循环50次
1 /**
 2  * 子线程先循环十次,主线程在循环20次,再子线程循环十次,主线程循环20次,如此循环50次
 3  * @author llj
 4  *
 5  */
 6 public class ThreadTest {
 7
 8     public static void main(String[] args) {
 9         Syn syn = new Syn();
10             new Thread(new Runnable() {
11                 @Override
12                 public void run() {
13                     for(int i=0; i<50; i++) {
14                         syn.child();
15                     }
16                 }
17             }).start();
18             for(int i=0; i<50; i++) {
19                 syn.main();
20             }
21     }
22 }
23
24 class Syn{
25     private boolean temp = true;
26     public synchronized void main() {
27         if(temp) {
28             try {
29                 this.wait();//导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法
30             } catch (InterruptedException e) {
31                 e.printStackTrace();
32             }
33         }
34         for(int i=0; i<20; i++) {
35             System.out.println("主线程"+i);
36         }
37         temp = true;
38         this.notify();//唤醒正在等待对象监视器的单个线程。
39     }
40     public synchronized  void child() {
41         if(!temp) {
42             try {
43                 this.wait();
44             } catch (InterruptedException e) {
45                 e.printStackTrace();
46             }
47         }
48         for(int j=0; j<10; j++) {
49             System.out.println("子线程"+j);
50         }
51         temp = false;
52         this.notify();
53     }
54 }

原文地址:https://www.cnblogs.com/lenglangjin/p/11025665.html

时间: 2024-10-12 20:31:30

线程:子线程先循环十次,主线程在循环20次,再子线程循环十次,主线程循环20次,如此循环50次的相关文章

网络操作不能直接写在主线程中 以及 为什么不能在子线程中更新UI控件的属性

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //注意: 所有网络操作不能直接写在主线程中 因为所有的网络操作都是耗时的,如果加载到主线程中,会导致与用户的交互出现问题 ,所以要加载到子线程中 // [self loadImage]; [self performSelectorInBackground:@selector(loadImage) withObject:nil]; } //加

面试题,子线程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); } } }

JUC-12.1.1-线程池中七大参数 四种线程池 五大状态

 ---------------->七大参数 在java中 ThreadPoolExecutor 是线程池类,这也是我们通常所说的线程池      下图是ThreadPoolExecutor构造方法 最后一个是全参数构造   里面有七大参数  corePoolSize 核心线程数量    maximumPoolSize  最大线程数     默认策略是超出会抛出异常 keepAliveTime  线程空闲后存活时间    TimeUnit  时间单位  和keepAliveTime配合使用  

python37 1.GIL--全局解释器锁 2.GIL带来的问题 3.为什么需要GIL 4.GIL的加锁解锁时机 5.关于GIL的性能的讨论 6.线程常用方法 7.GIL锁与自定义锁的区别 8.进程池与线程池 9.同步异步 10.异步调用

复习1.JoinableQueue--可以被join的队列2.多线程3线程的使用方法与进程一模一样3.1守护线程3.2线程安全问题3.3解决方案3.3.1互斥锁mutex3.3.2递归锁Rlock3.3.3信号量semaphore3.3.4死锁问题 详解:1.JoinableQueue--可以被join的队列 1.1join是等待任务结束 队列怎么叫结束 调用task_done一次则表示有一个数据被处理完成了,当task_done次数等于put的次数就意味着任务处理完成了 1.2这就是join的

再聊线程池

引言 最近恰好在组内分享线程池,又看了看四年前自己写的线程池文章,一是感叹时光荏苒,二是感叹当时的理解太浅薄了,三是感叹自己这么多年依然停留在浅薄的理解当中,没有探究其实现,羞愧难当.遂把分享的内容整理出来,希望能够让读者对线程池有一个全新的认识. 池化 这里池化并不是深度学习中的池化,而是将资源交给池来管理的这一过程.我们在开发中经常回接触到池化资源的技术,最常见的当然是数据库连接池,以及我们今天要讲的线程池,那这种池化资源的特点和好处是什么呢? 特点 通常管理昂贵的资源,如连接.线程等 资源

Java再学习——线程之创建

Java创建线程有两种方法,一种是继承Thread,另一种实现Runnable或Callable接口. 一,继承Thread public class APP { public static void main(String[] args) { Thread thread = new Thread() { @Override public void run() { int i = 0; while (i < 100) { System.out.println(i++); try { Thread

QT多线程的简单使用,主线程发一份数据,子线程收两份数据

先看效果图,示例发送数据“Hello World” 主线程:0x16f54aeda20,另两个子线程分别是0x4f1baff690.0x4f1baff6a0 因为在子线程中加了200ms.400ms延迟,所以打印是有先后顺序的 核心代码也就一丢丢.代码逻辑就是使用信号与槽使用线程之间产生联系 1 MfBusiness::MfBusiness(QObject *parent) : QObject(parent) 2 { 3 connect(&se,&MfSendData::Sgl_Send,

线程代替epll实现协程的原理(yield调用next时的函数使用其他线程进行处理,不影响主线程继续运行,next异步处理线程处理后使用send传回处理结果)

1 异步的实际说明 对于耗时的过程,我们将其交给别人(如其另外一个线程)去执行,而我们继续往下处理,当别人执行完耗时操作后再将结果反馈给我们,这就是我们所说的异步. 我们用容易理解的线程机制来实现异步. 2. 协程写法实现原理 在使用回调函数写异步程序时,需将本属于一个执行逻辑(处理请求a)的代码拆分成两个函数req_a和on_finish,这与同步程序的写法相差很大.而同步程序更便于理解业务逻辑,所以我们能否用同步代码的写法来编写异步程序? 回想yield关键字的作用? 初始版本 # codi

高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?

(1)高并发.任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换(2)并发不高.任务执行时间长的业务要区分开看:a)假如是业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以不要让所有的CPU闲下来,可以加大线程池中的线程数目,让CPU处理更多的业务b)假如是业务时间长集中在计算操作上,也就是计算密集型任务,这个就没办法了,和(1)一样吧,线程池中的线程数设置得少一些,减少线程上下文的切换(3)并发高.业务执行时间长,解决这种类型任务