实现Runnable的方式实现多线程:
public class RunnableTest implements Runnable {
@Override
public void run() {
for (int i = 0; i <100 ; i++) {
System.out.println (Thread.currentThread ().getName ( )+":"+i);
}
}
}
public class RunnableDemo {
public static void main(String[] args) {
//创建RunnableDemo对象的类
RunnableTest rt=new RunnableTest ();
//创建Thread对象,把RunnableDemo对象作为参数传递进去
Thread t1=new Thread (rt,"飞剑" );
Thread t2=new Thread (rt,"飞鸽" );
//启动线程
t1.start ();
t2.start ();
}
}
多线程安全问题:
出现安全问题的原因:1.是否是多线程环境。
2.是否有共享数据。
3.是否有多条语句操作共享数据。
*前两个原因是不能改变的,所以我们只能从第三个原因入手。让程序没有安全问题的环境,这需要
给多条语句操作共享数据加把锁。
解决多线程安全问题的方法:
1.同步代码块:
*格式:
synchronized(任意对象){
多条语句操作共享数据的代码
}
public class Test implements Runnable{
private int tickets=100;
@Override
public void run(){
while(true){
synchronized(){
if(tickets>0){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackrace();
}
System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票");
tickets--;
}
}
}
}
}