Java16-1 Runnable接口初识
2018-11-06 本文已影响0人
第二套广播体操
Runnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run 。
创建线程的第二种方式,实现Runnable接口
1、定义一个类实现Runnable接口
2、覆盖Runnable接口中的run方法,将线程要运行的方法储存在该方法中
3、通过Thread类创建线程对象,并将实现Runnable类的对象作为Thread类构造函数的参数进行传入
4、调用Thread类中的start方法开启线程
class Tacket implements Runnable{
private int tacket=50;
public void sale(){
while (tacket>0)
System.out.println("线程销售: "+Thread.currentThread().getName()+"销售票次: "+tacket--);
}
@Override
public void run() {
sale();
}
}
public class SaleTacket {
public static void main(String[] args) {
//线程任务对象
Tacket tpt=new Tacket();
//线程对象
Thread t1=new Thread(tpt,"窗口1");
Thread t2=new Thread(tpt,"窗口2");
t1.start();
t2.start();
}
}
多线程的安全问题
1、线程问题有处理到共同的数据
2、线程任务中有多条对共享数据的操作
一个线程在操作共享数据的过程中,其他线程参与了运算。造成了数据错误
可以使用 synchronized()方法解决 adj.同步的
只要保证多条操作数据的代码在同一时间,被一条线程执行
解决方法 1.同步代码块 2.同步函数
synchronized(对象)
{ //需要同步的代码
}
同步了在目前状况下保证了一次只能有一个线程在执行,其他线程进不来
好处:解决了多线程的安全问题
弊端:降低效率
有可能出现一种情况
多线程安全问题出现后,加入了同步机制,安全问题依旧
只要遵守同步的前提 就可以解决
同步的前提:多个线程必须使用同一个锁,这才是对多线程的同步
public void run() {
synchronized (object){
while (tacket>0)
{
System.out.println("线程销售: "+Thread.currentThread().getName()+"销售票次: "+tacket);
tacket--;
}
} }