------- android培训、java培训、期待与您交流! ----------
一.Java多线程的安全问题
1.产生安全问题的原因
多个线程操作同一个数据时,一个线程对数据的操作还没完成,另一个线就程获取了资源来操作同一个数据。从而使数据发生错误。
2.解决方式
线程同步:一个线程对共享数据的操作还没完成,其他线程变无法操作共享数据。
线程同步实现方式:
第一种方式:
使用synchronized 语句块,如:
synchronized(Object obj){
....多个线程操作共享数据的代码...
}
第二种方式:
使用synchronized修饰的函数,如:
public synchronized void 方法名(参数){
....多个线程操作共享数据的代码...
}
示例代码:
//1.编写Runable接口实现类
class Demo implements Runnable{
//定义一个私有的成员变量
private int tick = 100;
//创建一个Object对象。
Object obj = new Object();
//覆盖Runnable接口中的run()方法
public void run(){
//编写多线程的执行代码
while(true){
//tick是d所指对象的私有属性,输入共享数据。将操作tick的语句放入synchronized()方法体中。
synchronized(obj){
if(tick>0){
//Thread.currentThread().getName()——获得当前运行的线程对象的名字。
System.out.println(Thread.currentThread().getName()+"剩余票数"+tick--);
}
}
}
}
}
//编写测试类。
public class Test(){
public static void main (String[] args){
//2.创建实现类对象
Demo d= new Demo();
//3.调用Thread类的构造函数,创建Thread类的对象(即线程对象)。将实现类对象传递给不同线程对象。使不同线程共享同一个数据。
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
Thread t3 = new Thread(d);
//4.调用Thread类的对象t 的start()方法开启线程
t1.start();
t2.start();
t3.start();
}
}