------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
同步机制的实现方式:
* 1, 同步代码块
* 格式:
* synchronized(锁对象) {
* 可能出现线程不同步问题的代码
* }
* 这里的锁对象,可以是任何创建的对象
*
* 2, 同步方法
* 普通同步方法
public synchronized void method(){}
*
* 静态同步方法
public static synchronized void method(){}
---------------------------------------------------------------------------
多个售票员一起卖电影票案例
*
* 票 class Ticket
* 售票员 (线程)
*
发现模拟真实卖票出现的问题
* 1,重复的票
* 2,负数的票
*
* -----------------------
* 解决上述的问题
* 通过线程的同步机制来解决问题
* 线程的同步机制 就是 保证线程安全
*
* 线程安全 -- 线程同步 -- Vector
* 线程不安全 -- 线程不同步 -- ArrryList
*
---------------------------------------------
满足哪些条件,会导致线程不同步?----------------多个售票员卖同一张票,即线程不同步,冲突了
1, 多线程环境
2,多个线程对象,操作同一个数据 (票)
3,对共享数据(票), 进行了一步以上的操作
如何解决上述问题呢?
3,对共享数据(票), 进行了一步以上的操作
通过java中的同步机制,将与票相关的操作封装起来,同一时刻,只能有一个线程对象访问,这样,该问题解决了
-----------------------------------------------
同步方法的锁对象 是谁?
1,同步代码块: 锁对象是任意的,但是多个线程必须使用同一把锁------同步方法中也是
2,同步方法的锁对象是 this
3,同步静态方法的锁对象是 类名.class
Ticket.class
字节码文件对象
------------------------------------------------
死锁: 在同步方法、同步代码块嵌套使用的时候,可能产生的一种异常现象[无限等待]
------------------------------------------------
Lock : 锁, jdk1.5
public interface Lock
实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作
方法:
void lock()获取锁。
void unlock()释放锁。
-------------------------------------------------
匿名内部类方式使用多线程
new Thread(){
public void run(){
code...
}
}.start();
------------
new Thread(new Runnable(){
public void run(){
code...
}
}).start();
同步机制的应用:
同步机制的实现方式:
* 1, 同步代码块
* 格式:
* synchronized(锁对象) {
* 可能出现线程不同步问题的代码
* }
* 这里的锁对象,可以是任何创建的对象
*
* 2, 同步方法
* 普通同步方法
public synchronized void method(){}
*
* 静态同步方法
public static synchronized void method(){}
---------------------------------------------
满足哪些条件,会导致线程不同步?
1, 多线程环境
2,多个线程对象,操作同一个数据 (票)
3,对共享数据(票), 进行了一步以上的操作
如何解决上述问题呢?
3,对共享数据(票), 进行了一步以上的操作
通过java中的同步机制,将与票相关的操作封装起来,同一时刻,只能有一个线程对象访问,这样,该问题解决了
-----------------------------------------------
同步方法的锁对象 是谁?
1,同步代码块: 锁对象是任意的,但是多个线程必须使用同一把锁
2,同步方法的锁对象是 this
3,同步静态方法的锁对象是 类名.class
Ticket.class
字节码文件对象
案例:
多个售票员一起卖电影票案例
*
* 票 class Ticket
* 售票员 (线程)
*
发现模拟真实卖票出现的问题
* 1,重复的票
* 2,负数的票
*
* -----------------------
* 解决上述的问题
* 通过线程的同步机制来解决问题
* 线程的同步机制 就是 保证线程安全
*
* 线程安全 -- 线程同步 -- Vector
* 线程不安全 -- 线程不同步 -- ArrryList
*
* --------------------------
* 同步机制的实现方式:
* 1, 同步代码块
* 格式:
* synchronized(锁对象) {
* 可能出现线程不同步问题的代码
* }
* 这里的锁对象,可以是任何创建的对象
*
* 2, 同步方法
* 普通同步方法
*
* 静态同步方法
方式1:
多个售票员一起卖电影票案例 票 class Ticket 售票员 (线程)
方式2: 多个售票员一起卖电影票案例 票 class Ticket 售票员 (线程)
方式3:
多个售票员一起卖电影票案例 票 class Ticket 售票员 (线程)
注意:
静态方法时,成员变量也改成静态的
方式4:多个售票员一起卖电影票案例 票 class Ticket 售票员 (线程)
Lock : 锁, jdk1.5
public interface Lock
实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作
方法:
void lock()获取锁。
void unlock()释放锁。
匿名内部类方式使用多线程
new Thread(){
public void run(){
code...
}
}.start();
------------
new Thread(new Runnable(){
public void run(){
code...
}
}).start();
*/
例:
public class InnerClassThread {
public static void main(String[] args) {
匿名内部类方式使用多线程
/*
for (int i = 0; i < 3; i++) { ------------------------------创建了3个线程
new Thread(){
重写run方法
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
};
}.start();
}
*/
匿名内部类方式使用多线程
new Thread(new Runnable(){ --------------------新建了一个1个线程
public void run(){
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
}).start();
}
}