黑马程序员技术交流社区
标题:
毕老师视频中线程任务问题
[打印本页]
作者:
徐传任
时间:
2012-9-17 20:39
标题:
毕老师视频中线程任务问题
class Test implements Runnable
{
private boolean flag;
Test(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)
{
synchronized(MyLock.locka)
{
System.out.println("if locka.....");
synchronized(MyLock.lockb)
{
System.out.println("if lockb.....");
}
}
}
else
{
synchronized(MyLock.lockb)
{
System.out.println("else lockb.....");
synchronized(MyLock.locka)
{
System.out.println("else locka.....");
}
}
}
}
}
class MyLock
{
public static Object locka = new Object();
public static Object lockb = new Object();
}
class DeadLockTest2
{
public static void main(String[] args)
{
Test a = new Test(true);
Test b = new Test(false);
Thread t1 = new Thread(a);//毕老师所说的线程任务必须是一个对象,但是在这里有a,b两个对象
Thread t2 = new Thread(b);//我知道所执行的run方法是同一个,但是对于flag我还是不理解
t1.start();
t2.start();
}
}
复制代码
毕老师所说的线程任务必须是一个对象,但是在这里有a,b两个对象,我知道所执行的run方法是同一个,但是对于flag我还是不理解,视频中毕老师说是flag只能取这两个值,如果换成int num就不可以了,我对flag这里还是不明白,转不过来,麻烦帮忙再给我讲解一下,谢谢了
作者:
严海荣
时间:
2012-9-17 21:34
这里的flag是一个标志位,它是boolean型变量,只有2个值就是 true和false.
Test a = new Test(true);
Thread t1 = new Thread(a);//这里创建t1线程,然后往Test类的构造函数中的flag标志位传入true.
if(flag) 就相当于if(true)满足就执行了。
如果是if(!flag) 就相当于if(false)就执行else。
作者:
史小兵
时间:
2012-9-17 21:57
在此处的flag只是一个boolean来确定到底执行那一块代码的,其实如果你换成int num我感觉也是可以的不过是判断的条件会变一下比如:
class Test implements Runnable
{
private int a;
Test(int a)
{
this.a = a;
}
public void run()
{
if(this.a==1)
{
synchronized(MyLock.locka)
{
System.out.println("if locka.....");
synchronized(MyLock.lockb)
{
System.out.println("if lockb.....");
}
}
}
else
{
synchronized(MyLock.lockb)
{
System.out.println("else lockb.....");
synchronized(MyLock.locka)
{
System.out.println("else locka.....");
}
}
}
}
}
和
class MyLock
{
public static Object locka = new Object();
public static Object lockb = new Object();
}
与
class DeadLockTest2
{
public static void main(String[] args)
{
Test a = new Test(1);
Test b = new Test(2);
Thread t1 = new Thread(a);//毕老师所说的线程任务必须是一个对象,但是在这里有a,b两个对象
Thread t2 = new Thread(b);//我知道所执行的run方法是同一个,但是对于flag我还是不理解
t1.start();
t2.start();
}
}
关键就是要明白代码执行的原理!希望可以帮到你!
作者:
王自强
时间:
2012-9-17 22:18
<P> </P>
复制代码
class Test implements Runnable
{
private boolean flag;//把成员变量换成数字,字母都可以,就是一个标识而起,因为boolean只有两个值,用起来比较方便。
Test(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)//相当于 if(true) 或 if(flag==true)
{
synchronized(MyLock.locka)
{
System.out.println("if locka.....");
synchronized(MyLock.lockb)
{
System.out.println("if lockb.....");
}
}
}
else// 这时 flag != true ,即flag == false
{
synchronized(MyLock.lockb)
{
System.out.println("else lockb.....");
synchronized(MyLock.locka)
{
System.out.println("else locka.....");
}
}
}
}
}
class MyLock
{
public static Object locka = new Object();
public static Object lockb = new Object();
}
class DeadLockTest2
{
public static void main(String[] args)
{
Test a = new Test(true);
Test b = new Test(false);
Thread t1 = new Thread(a);
/*这个传入的参数是要运行run方法中的下面这部分
if(flag)
{
synchronized(MyLock.locka)
{
System.out.println("if locka.....");
synchronized(MyLock.lockb)
{
System.out.println("if lockb.....");
}
}
*/
Thread t2 = new Thread(b);
/*这个传入的参数是 false,所以运行的是run方法中的下面这部分
else
{
synchronized(MyLock.lockb)
{
System.out.println("else lockb.....");
synchronized(MyLock.locka)
{
System.out.println("else locka.....");
}
}
}
*/
t1.start();
t2.start();
}
}
flag标志就是为了引发死锁而起,没啥特别的吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2