java多线程

线程间通信:

        两个线程操作同一份数据;

        两个线程对数据的操作不一样。

例:

运行该程序,结果为:

结果杂乱无章,分析一下:

线程2在执行System.out.println(r.name+"......"+r.sex); 时 ,线程1也在不断地执行,线程1把r.name设置为张三,把r.sex设置为女。线程2打印了当前Resource对象的name后,还没执行完打印,执行权被线程1夺走,线程1执行i++后把r.name设置为Jack,把r.sex设置为Femail。此时执行权又被线程2抢走,线程2接着执行打印,此时打印的r.sex就是Femail。

显然,这是没有进行同步导致的,所以要进行同步。

线程同步有两个条件:

1.有两个或两个以上线程

2.使用同一个锁

这里已经是多线程了,所以还要满足第二个条件,使用同一个锁。

同步的代码块是操作同一份数据的代码。

在synchronized()的参数表中,参数可以是任意一个对象,随便用哪个对象都行。同步时要用同一个锁,所以参数必须是同一个对象。

notify唤醒线程池中排在最前面的睡眠线程。并且只能唤醒使用同一个锁的线程。

当线程进入冻结状态,即线程持有锁,但不执行,可使用interrupt方法终止线程。

join方法强夺执行权:

当一个线程对象调用join方法后,会把执行权从正在占有者那里强夺过来,并一直执行到该线程结束才放掉执行权。

多用于需要临时加入一个线程,并需将其执行完。

线程的默认优先级是5。

可以自己设置线程的优先级:setPriority(n);

sleep(time),wait(),yield()的区别。

sleep(time):让线程睡眠,不释放执行权。带参数,表示睡眠时间,到时间后自动唤醒。

wait():让线程睡眠,释放执行权,进入线程池。必须通过notify唤醒。

yield();让线程放弃执行权,该方法不需要notify唤醒,只是临时放弃执行权。让该线程执行的频率小一点。

在游戏开发中,线程的使用是很频繁而且很重要的。所以掌握线程的各种作用及用法还是很重要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值