黑马程序员--java 知识回顾--多线程
来源:互联网 发布:天猫美工招聘 编辑:程序博客网 时间:2024/05/16 19:37
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
线程间通信:
两个线程操作同一份数据;
两个线程对数据的操作不一样。
例:
运行该程序,结果为:
结果杂乱无章,分析一下:
线程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唤醒,只是临时放弃执行权。让该线程执行的频率小一点。
在游戏开发中,线程的使用是很频繁而且很重要的。所以掌握线程的各种作用及用法还是很重要的。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看 www.itheima.com
- 黑马程序员--java 知识回顾--多线程
- 黑马程序员--java 知识回顾
- 黑马程序员Java知识回顾之数组
- 黑马程序员Java知识回顾之枚举
- 黑马程序员--java 知识回顾--集合笔记
- 黑马程序员 java基础回顾---多线程
- 黑马程序员---回顾之java多线程技术
- <黑马程序员>---java基础---多线程知识
- 黑马程序员-Java编程知识总结多线程
- 黑马程序员_多线程回顾
- 黑马程序员Java知识回顾之集合_map
- 黑马程序员Java知识回顾之集合_list与set
- 黑马程序员--java 知识回顾--内部类和字符串
- 黑马程序员-----Java基础知识回顾
- 黑马程序员-----java基础回顾
- 黑马程序员-002多线程知识
- 【 黑马程序员】多线程知识总结
- 黑马程序员——多线程回顾
- 关于标准差
- arguments.callee 调用自身
- gradle 中文乱码问题
- Sitecore的是理想的内容管理解决方案
- P6 Analytics(分析)演示中国家解决方案
- 黑马程序员--java 知识回顾--多线程
- NDSS加州交通学校课程线上100%及批准
- Millsberry评论一个伟大的,玩免费线上虚拟世界
- SQL语言(学习笔记二)
- MetaTrader 5的手机为iPhone,iPod和iPad。如何安装
- Magento电子商务容易与标签管理市场营销和分析
- 项目1----------写自己的android录像机(2)
- libevent 在windows下的编译过程
- M-249的IBM Cognos财务绩效管理销售精通测试V1-指引