线程通信的理解、线程的状态、为什么会有多线程的安全问题、 多线程安全问题的解决办法、创建线程有几种方式,那种方式比较好, 为什么、同步的前提、说说你对死锁的理解 同步的前提:必须是多线程。操作一个共享数据,该数据被多条语句操作 同步:效率低,如果出现嵌套同步,就容易产生死锁 死锁:指俩个或者以上的线程在执行过程中,因为 争夺资源产生的一种互相等待现象 run:仅仅是封装了被线程执行的代码,直接调用的普通方法, start:首先启动了线程,然后由jvm去调用该线程的run()方法 线程状态: 新建:start() 运行:具备执行资格,同时具备执行权; 冻结:sleep(time),wait()—notify()唤醒;线程释放了执行权,同时释放执行资格; 临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权; 消亡:stop() 创建线程的第一种方式:继承Thread ,由子类复写run方法。 第二种方式:实现一个接口Runnable 步骤: 1,定义类实现Runnable接口。 2,覆盖接口中的run方法(用于封装线程要运行的代码)。 3,通过Thread类创建线程对象; 4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。 为什么要传递呢?因为要让线程对象明确要运行的run方法所属的对象。 5,调用Thread对象的start方法。开启线程,并运行Runnable接口子类中的run方法。 Tickett = new Ticket(); 实现接口的好处:避免了java单继承带来的局限性,适合多个相同的代码去处理同一个资源, 把线程和程序的代码,数据有效分离,较好的体现了面向对象的设计思想。 安全问题产生原因:多个线程操作一个拥有多条语句的共享数据,产生数据混乱 解决:加上同步
|