实现runnable接口的多线程主要实现以下几步:
1.定义实现Runnable接口
2.overwrite Runnable接口中的run方法,将线程要运行的代码存放在run方法中。
3.通过Thread类建立线程对象。
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
5.调用Thread类的start方法开启线程并调用Runnable接口子类run方法。
程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
- 避免点继承的局限,一个类可以继承多个接口。
- 适合于资源的共享
但资源共享要注意线程安全问题
目的:程序是否存在安全问题,如果有,如何解决?
如何找问题:
1.明确哪些代码是多线程运行代码。
2.明确共享数据
3.明确多线程运行代码中哪些语句是操作共享数据的。
- class Bank{
- private int sum;
- public void add(int n){
- sum+=n;
- System.out.println("sum="+sum);
- }
- }
- class Cus implements Runnable{
- private Bank b=new Bank();
- public void run(){
- synchronized(b){
- for(int x=0;x<3;x++)
- {
- b.add(100);
- }
- }
- }
- }
- public class BankDemo{
- public static void main(String []args){
- Cus c=new Cus();
- Thread t1=new Thread(c);
- Thread t2=new Thread(c);
- t1.start();
- t2.start();
- }
- }