currentThread()方法可以返回段正在被哪个线程调用的信息。...public class Main { public static void main(String[] args) { System.out.println(Thread.currentThread...().getName()= " + Thread.currentThread().getName()); System.out.println("this.getName()= " +...根据结果逆向分析:Thread.currentThread().getName()获得的始终是主线程(也就是说由JVM创建的main线程)。...Thread.currentThread().getName()获得的始终是执行start()方法的线程(或者说是调用run()方法的线程)。
main(String[] args) { /** * 1.创建CountOperate对象时,调用了该构造方法,此时是主线程执行构造方法的代码块,所以Thread.currentThread...(countOperate)的名字;如果未指定,默认为Thread-0 * 2.t1.start()启动线程,调用目标对象(countOperate)的run(),所以Thread.currentThread...().getName()="+Thread.currentThread().getName()); //Thread.currentThread().getName()指调用代码片段的线程名字...().getName()="+Thread.currentThread().getName()); //调用代码片段的线程信息 System.out.println("this.getName...().getName()="+Thread.currentThread().getName()); System.out.println("this.getName()="+this.getName
currentThread()方法 currentThread()方法可返回代码段正在被哪个线程调用的信息。...().getName()=" + Thread.currentThread().getName()); System.out.println("this.getName()=" + this.getName...().getName()=main this.getName()=Thread-0 CountOperate---end run---begin Thread.currentThread().getName...()=A this.getName()=A run---end 我们解释一下,首先输出Thread.currentThread().getName()=main很正常,实例化MyThread类,调用...在run()中的代码结果表示,this 与 Thread.currentThread()不是同一个引用。
blockedThreadCollection.contains(Thread.currentThread())){ blockedThreadCollection.add(Thread.currentThread...= true; this.currentThread = Thread.currentThread();//设置lock是当前的线程虽然抢锁失败了 } @Override public synchronized...blockedThreadCollection.contains(Thread.currentThread())){ blockedThreadCollection.add(Thread.currentThread...this.currentThread = Thread.currentThread();//Thread.currentThread()这个是获取到锁的线程 } @Override public synchronized...()); this.initValue = true; this.currentThread = Thread.currentThread(); } ——————————-30——————————- 版权声明
]); }]; [operation addExecutionBlock:^{ NSLog(@"3--%@",[NSThread currentThread]);...}]; [operation addExecutionBlock:^{ NSLog(@"4--%@",[NSThread currentThread]); }];...NSLog(@"8--%@",[NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@...]); }]; } -(void)run1{ NSLog(@"-run1--%@",[NSThread currentThread]); } -(void)run2{ NSLog...(@"-run2--%@",[NSThread currentThread]); } 主队列log.png 自定义队列(系统会自动异步执行NSOperation中的操作) 使用 NSOperation
执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@", [NSThread currentThread]); }); dispatch_async...(queue, ^{ NSLog(@"执行3:%@", [NSThread currentThread]); sleep(1); NSLog(@"完成3:%@", [NSThread currentThread...(queue, ^{ NSLog(@"执行3:%@", [NSThread currentThread]); sleep(1); NSLog(@"完成3:%@", [NSThread currentThread...(), ^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@", [NSThread currentThread...2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@", [NSThread currentThread]); }); dispatch_sync
]); sleep(2); NSLog(@"完成1:%@", [NSThread currentThread]); }); dispatch_group_async(group, queue,...^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(2); NSLog(@"完成3:%@", [NSThread currentThread...^{ NSLog(@"执行2:%@", [NSThread currentThread]); sleep(4); NSLog(@"完成2:%@", [NSThread currentThread...执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@", [NSThread currentThread]); }); dispatch_barrier_sync...执行2:%@", [NSThread currentThread]); sleep(3); NSLog(@"完成2:%@", [NSThread currentThread]); }); dispatch_barrier_async
= Thread.currentThread(); try { lock.lock(); System.out.println...} System.out.println("currentThread = " + currentThread.getName() + " isInterrupted:" + currentThread.isInterrupted...= " + Thread.currentThread().getName()); } finally { lock.unlock(); } } currentThread...= " + currentThread.getName() + " isInterrupted:" + currentThread.isInterrupted()); }, "t1")...; t1.start(); t1.interrupt(); System.out.println("currentThread = " + Thread.currentThread
($"线程:{Thread.CurrentThread.ManagedThreadId}"), ()=>Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId...($"线程:{Thread.CurrentThread.ManagedThreadId}"), ()=>Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId...($"线程:{Thread.CurrentThread.ManagedThreadId}"), ()=>Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId...($"线程:{Thread.CurrentThread.ManagedThreadId}"), ()=>Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId...($"线程:{Thread.CurrentThread.ManagedThreadId}"), ()=>Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId
); }); dispatch_sync(con_queue, ^{ NSLog(@"2----%@",NSThread.currentThread...); }); dispatch_sync(con_queue, ^{ NSLog(@"3----%@",NSThread.currentThread...); }); dispatch_async(con_queue, ^{ NSLog(@"4----%@",NSThread.currentThread...); }); NSLog(@"6---%@",NSThread.currentThread); }); } image.png image.png...); }); NSLog(@"6---%@",NSThread.currentThread); }); } image.png 相信经过上面的讲解
= Thread.CurrentThread; Console.WriteLine(currentthread.Name + currentthread.ManagedThreadId...= Thread.CurrentThread; currentthread.Name = "主线程"; Console.WriteLine(...请看一段代码: Thread currentthread = Thread.CurrentThread; currentthread.Name = "主线程"; Console.WriteLine...= Thread.CurrentThread; Console.WriteLine(currentthread.Name + currentthread.ManagedThreadId);...Thread currentthread = Thread.CurrentThread; Console.WriteLine(currentthread.Name + currentthread.ManagedThreadId
在.NET Core中.resx资源文件是和线程的语言相关,其主要和当前线程的如下两个语言属性相关: Thread.CurrentThread.CurrentCulture Thread.CurrentThread.CurrentUICulture...我们来看看如下代码: /// /// 测试Async和Await模式,是否会对Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture...Thread.CurrentThread.CurrentCulture.ToString()}, CurrentUICulture是{Thread.CurrentThread.CurrentUICulture.ToString...($"Thread id:{Thread.CurrentThread.ManagedThreadId.ToString()}=>主线程的CurrentCulture是{Thread.CurrentThread.CurrentCulture.ToString...是{Thread.CurrentThread.CurrentCulture.ToString()}, CurrentUICulture是{Thread.CurrentThread.CurrentUICulture.ToString
blockedThreadList.contains(Thread.currentThread())){ blockedThreadList.add(Thread.currentThread...blockedThreadList.remove(Thread.currentThread()); throw new InterruptedException(...= true; currentThread = Thread.currentThread(); } } @Override public...blockedThreadList.contains(Thread.currentThread())){ blockedThreadList.add(Thread.currentThread...()); locked = true; currentThread = Thread.currentThread();
NSBlockOperation * o1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1---%@", [NSThread currentThread...]); NSLog(@"1.1---%@", [NSThread currentThread]); NSLog(@"1.2---%@", [NSThread currentThread]);...NSLog(@"1.3---%@", [NSThread currentThread]); NSLog(@"1.4---%@", [NSThread currentThread]); }]...NSBlockOperation * o2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"2---%@", [NSThread currentThread...NSBlockOperation * o3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"3---%@", [NSThread currentThread
); }); dispatch_sync(con_queue, ^{ NSLog(@"2----%@",NSThread.currentThread...); }); dispatch_sync(con_queue, ^{ NSLog(@"3----%@",NSThread.currentThread...); }); NSLog(@"6---%@",NSThread.currentThread); }); } ?...); }); NSLog(@"6---%@",NSThread.currentThread); }); } ?...); }); NSLog(@"6---%@",NSThread.currentThread); }); } ?
所以此方法不是特别优雅 2.通过 Thread.currentThread().isInterrupted() 来判断 public class Shutdoown { public static void...Thread.currentThread().isInterrupted()) { System.out.println("=== " + Thread.currentThread().isInterrupted...通过 Thread.currentThread().isInterrupted() 来判断-while(true) 版本 public class Shutdoown { public static...Thread.currentThread().isInterrupted()) { System.out.println("=== " + Thread.currentThread().isInterrupted...总结: 显然,通过 Thread.currentThread().isInterrupted() 来停止线程,显然要比标示位优雅一些,但要防止条件判断永远无法生效。
().getName()+"放入一个元素"); q.add(2); System.out.println(Thread.currentThread().getName...()+"放入一个元素"); q.add(3); System.out.println(Thread.currentThread().getName()+"...().getName()+"拿走一个元素"); q.remove(); System.out.println(Thread.currentThread()....getName()+"拿走一个元素"); q.remove(); System.out.println(Thread.currentThread().getName...()+"拿走一个元素"); q.remove(); System.out.println(Thread.currentThread().getName()
().getName() + "添加数据"); System.out.println(Thread.currentThread().getName() + ": 还有:" + list.size...().getName() + ": 消费数据: " + returnVal); System.out.println(Thread.currentThread().getName...().getName() + ": 消费数据: " + returnVal); System.out.println(Thread.currentThread().getName...().getName() + ": 消费数据: " + returnVal); System.out.println(Thread.currentThread().getName...().getName() + ": 消费数据: " + returnVal); System.out.println(Thread.currentThread().getName
{ public synchronized static void test1(){ System.out.println(new Date() + " " + Thread.currentThread...public synchronized static void test2(){ System.out.println(new Date() + " " + Thread.currentThread...{ public synchronized static void test1(){ System.out.println(new Date() + " " + Thread.currentThread...synchronized (ClassLock2.class) { System.out.println(new Date() + " " + Thread.currentThread...); } public synchronized void test1(){ System.out.println(new Date() + " " + Thread.currentThread
= null && (threadOwnsTheLock == Thread.currentThread())) { return true; }...if (tryAcquire(1)) { threadOwnsTheLock = Thread.currentThread(); return true;...= Thread.currentThread(); try { waitThreadsQueue.add(currentThread);...= Thread.currentThread())) { System.out.println("Wrong state, this thread don't own this...= Thread.currentThread(); try { waitThreadsQueue.add(currentThread);
领取专属 10元无门槛券
手把手带您无忧上云