|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。
同步常常作为断面被援用。断面是指一次只能有一个线程实行它。多个线程同时实行同步代码是有大概的。
这个曲解是由于良多程序员以为同步关头字锁住了它所包抄的代码。可是实践情形不是如许的。同步加锁的是对象,而不是代码。因而,假如你的类中有一个同步办法,这个办法能够被两个分歧的线程同时实行,只需每一个线程本人创立一个的该类的实例便可。
参考上面的代码:
classFooextendsThread
{
privateintval;
publicFoo(intv)
{
val=v;
}
publicsynchronizedvoidprintVal(intv)
{
while(true)
System.out.println(v);
}
publicvoidrun()
{
printVal(val);
}
}
classSyncTest
{
publicstaticvoidmain(Stringargs[])
{
Foof1=newFoo(1);
f1.start();
Foof2=newFoo(3);
f2.start();
}
}
运转SyncTest发生的输入是1和3交织的。假如printVal是断面,你看到的输入只能是1大概只能是3而不克不及是二者同时呈现。程序运转的了局证实两个线程都在并发的实行printVal办法,即便该办法是同步的而且因为是一个无穷轮回而没有停止。
要完成真实的断面,你必需同步一个全局对象大概对类举行同步。上面的代码给出了一个如许的典范。
classFooextendsThread
{
privateintval;
publicFoo(intv)
{
val=v;
}
publicvoidprintVal(intv)
{
synchronized(Foo.class){
while(true)
System.out.println(v);
}
}
publicvoidrun()
{
printVal(val);
}
}
下面的类不再对一般的类实例同步而是对类举行同步。关于类Foo而言,它只要独一的类界说,两个线程在不异的锁上同步,因而只要一个线程能够实行printVal办法。
这个代码也能够经由过程对大众对象加锁。比方给Foo增加一个静态成员。两个办法都能够同步这个对象而到达线程平安。
<p>
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解 |
|