什么是线程
来源:互联网 发布:淘宝店铺水印笔刷 编辑:程序博客网 时间:2024/05/16 18:26
// 线程总结:
/*
* 三种创建方式:
* 什么是线程 : 程序的多个执行路径 ,改变了程序顺序执行的特点,可以多条线共同执行,实际是模拟的并行
* 那么既然是并发,就存在线程安全问题,即同时访问同一份数据
* 因此就要保证要访问的数据的安全性
* 涉及到 锁!!!
* synchronized
* 同步块 (引用类型|.class类|) | 同步方法 加在方法上
* 注意 锁的位置可能影响程序执行的性能,因此要合理的考虑锁添加的位置
*
*/
public class Test02 {
public static void main(String[] args) {
Ticket tic = new Ticket();
// 两个线程同时代理一个对象
// 并且同时读取同一份唯一的资源
Thread t = new Thread(tic);
Thread t2 = new Thread(tic);
t.start();
t2.start();
}
}
class Ticket implements Runnable{
private int num = 20;
public void run(){
while(true){
if(num>0){
System.out.println(num--);
}else {
break;
}
}
}
/*
* 三种创建方式:
* 什么是线程 : 程序的多个执行路径 ,改变了程序顺序执行的特点,可以多条线共同执行,实际是模拟的并行
* 那么既然是并发,就存在线程安全问题,即同时访问同一份数据
* 因此就要保证要访问的数据的安全性
* 涉及到 锁!!!
* synchronized
* 同步块 (引用类型|.class类|) | 同步方法 加在方法上
* 注意 锁的位置可能影响程序执行的性能,因此要合理的考虑锁添加的位置
*
*/
public class Test02 {
public static void main(String[] args) {
Ticket tic = new Ticket();
// 两个线程同时代理一个对象
// 并且同时读取同一份唯一的资源
Thread t = new Thread(tic);
Thread t2 = new Thread(tic);
t.start();
t2.start();
}
}
class Ticket implements Runnable{
private int num = 20;
public void run(){
while(true){
if(num>0){
System.out.println(num--);
}else {
break;
}
}
}
}
在哪里加锁呢?
显然我们可以直接在方法上加锁,但是太傻了,相当于我们在卖票窗口买票,结果在售票大厅加了一把锁,这样效率太低了。
因此我们可以把锁加在方法里,更具体的是循环里。
public void run(){
while(true){
synchronized(this)
if(num>0){
System.out.println(num--);
}else {
break;
}}
这样就可以保证每次只有一个线程能够读取到。
注意:一定要保证同步块中是引用类型,并且其指向不能改变。
阅读全文
0 0
- 什么是线程?
- 什么是线程
- 什么是线程?
- 什么是线程?
- 什么是线程
- 什么是线程
- 什么是线程?
- 什么是线程
- 什么是线程?
- 什么是线程???
- 什么是进程,什么是线程
- 什么是线程?什么是守护线程?
- Java线程:什么是线程
- POSIX线程-什么是线程
- Java线程:什么是线程
- 什么是线程,如何创建线程
- 什么是线程,如何创建线程 .
- 什么是系统进程,线程
- pat-a1053. Path of Equal Weight (30)
- 2017.5月份总结
- Problem D: qwb与神奇的序列
- 延迟渲染中光源的体积光(Light Volumn)
- linux多进程(fork)
- 什么是线程
- VS中printf参数研究
- Vue.js 学习2 实例
- 机器学习的明天——迁移学习
- 【微营销】第10天 微营销实战技巧之如何通过微博做活动,增加粉丝关注度
- Drupal 8 模块开发 及页面无法显示原因总结
- 多线程知识点总结
- 栈的链式结构
- 单向循环链表 通讯录