一个关于lock的多线程。
根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答案:
答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
---------------------------------------------------------------------------------------------------------------
我的问题这样:我以前基本没接触过多线程的,如果觉得我的问题很白痴 请见谅!。。。。。。
我没想明白答案所说的int是按值传递传递的只是一个副本,换成object就会死锁 是一个什么样的情况,
是在多线程情况下吗,是两个线程同时调用这个方法吗。是两个或多个线程的话,lock锁住了对象 那其他线程就不回去执行了,,,,那单线程下的话 就更不应该出现死锁了,,,那答案中所说的int换成object会死锁 到底是一个什么样的情况呢。。。。。?
相关推荐
Java多线程中Lock锁的使用总结
主要介绍了Java多线程中Lock锁的使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
105_多线程_互斥锁_第1篇【pthread_mutex_lock()创建两个线程,同一时间只能有一个运行,一个一个的打印其中的字符串】【lock 、unlock理解】
东方图: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include <pthread.h> #include <string.h> pthread_mutex_t mutex;//= PTHREAD_MUTEX_INITIALIZER; void my_print(char *str) { //printf("%s\n", str); while (*s
Java Lock锁多线程中实现流水线任务
主要介绍了Java Lock锁多线程中实现流水线任务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
c#多线程中Lock()关键字的用法小结
本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。 其中,lock是一种比较好用的简单的线程同步方式,它是通过为给定对象获取互斥锁来实现同步的。它可以保证当一个线程在关键代码段的时候,另一个线程不会进来,它只能等待,等到那个线程对象被释放,也就是说线程出了临界区。用法:
Java多线程基础——Lock类
Lock类是Java类来提供的功能,丰富的api使得Lock类的同步功能比synchronized的同步更强大。本文对此进行详细介绍,下面跟着小编一起来看下吧


