java
2016-12-22 15:44
183 查看
多线程第二种实现方式的好处是什么?
实现了Runnable接口,比如一个student类继承了Person类,又实现了runnable接口,Runnable仅仅是将线程任务进行了对象的封装。
Runnable r = new Student();
Thread t = new Thread(r);
实现Runnable接口的好处:
1,将线程的任务从线程的子类中分离出来,进行了单独的封装
按照面向对象的思想将任务封装成了对象
2,避免了java单继承的局限性。
所以创建线程的第二种方式较为常用。
class Ticket implements Runnable{ private int num = 100; Object obj = new Object(); public void run(){ while(true){ synchronized (obj) { if(num > 0){ /* * 这样实际上卖了400张票,为什么?实际上每个线程都操作了100张票。 * 用静态实现数据共享行不行? * 多次启动一个线程是违法的 * * 线程安全问题产生的原因: * 1,多个线程在同时操作共享数据 * 2,操作共享数据的代码有多条 * 这样就导致了线程的安全问题的产生。: * 怎么解决? * 将共享数据封装起来,当一个线程执行的时候,其他线程不能参与运算这些数据, * 这个线程结束后,才能让其他的线程继续执行。 * * 关键字:synchronized * 在java中,用同步代码块就可以解决这个问题。 * * synchronized(对象){//标记 * 需要被同步的代码块; * } * * * */ System.out.println(Thread.currentThread().getName()+"...." + num--); } } } } } public class TicketDemo { public static void main(String[]args){ Ticket t = new Ticket(); Thread t1 = new Thread(t); Thread t2 = new Thread(t); Thread t3 = new Thread(t); Thread t4 = new Thread(t); // Ticket t2 = new Ticket(); // Ticket t3 = new Ticket(); // Ticket t4 = new Ticket(); t1.start(); t2.start(); t3.start(); t4.start(); // t1.start(); // t2.start(); // t3.start(); // t4.start(); } }
相关文章推荐
- java的优点再谈!
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
- HTML、Swing还是XML,Java客户端工具选择?(三)
- sun 称 java 存在漏洞!
- 实 现JAVA 的 动 态 类 载 入 机 制
- 从C++到Java --理解面向对象是关键所在
- Borland Eyeing the Chasm Between Java and .NET
- Java.NET --一个基于Java的Microsoft.NET框架的实现
- 批判性地看待一种可行的表示技术:JavaServerPages servlet技术(下)
- 批判性地看待一种可行的表示技术:JavaServerPages servlet技术(上)
- PHP & Java(4)
- PHP & Java(3)
- PHP & Java(2)
- PHP & Java(1)
- Java 101之线程基础
- java动画中消除闪烁的两个绝招!
- [导入]Java线程的深入探讨
- java小程序中鼠标事件的响应处理(包含右键、双击等)
- 关于java 的 Classpath全解
- Java代码编写的一般性指导