JAVA多线程实现Runnable方式
2011-12-24 15:35
651 查看
(一)
步骤:
1.定义实现Runnable接口
2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。
3.通过Thread类建立线程对象。
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要讲Runnable接口的子类对象传递给Thread的构造方法。因为自定义的方法的所属的对象是Runnable接口的子类对象。
5.调用Thread类的start方法开启线程并调用Runnable接口子类run方法。
(二)线程安全的共享代码块问题
目的:程序是否存在安全问题,如果有,如何解决?
如何找问题:
1.明确哪些代码是多线程运行代码。
2.明确共享数据
3.明确多线程运行代码中哪些语句是操作共享数据的。
总结:
1.在一个类中定义要处理的问题,方法。
2.在实现Runnable的类中重写run方法中去调用已经定义的类中的要处理问题的方法。
在synchronized块中接受要处理问题那个类的对象。
3.在main方法中去定义多个线程去执行。
步骤:
1.定义实现Runnable接口
2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。
3.通过Thread类建立线程对象。
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要讲Runnable接口的子类对象传递给Thread的构造方法。因为自定义的方法的所属的对象是Runnable接口的子类对象。
5.调用Thread类的start方法开启线程并调用Runnable接口子类run方法。
(二)线程安全的共享代码块问题
目的:程序是否存在安全问题,如果有,如何解决?
如何找问题:
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(); } }
或者第二种方式,将同步代码synchronized放在修饰方法中。
class Bank{ private int sum; public synchronized void add(int n){ Object obj=new Object(); sum+=n; try{ Thread.sleep(10); }catch(Exception e){ e.printStackTrace(); } System.out.println("sum="+sum); } } class Cus implements Runnable{ private Bank b=new Bank(); public void run(){ 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(); } }
总结:
1.在一个类中定义要处理的问题,方法。
2.在实现Runnable的类中重写run方法中去调用已经定义的类中的要处理问题的方法。
在synchronized块中接受要处理问题那个类的对象。
3.在main方法中去定义多个线程去执行。
相关文章推荐
- JAVA 多线程的简单实现(runnable接口方式)
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- Java实现Runnable接口方式实现多线程的优势
- java多线程实现(thread和runnable接口两种方式以及其区别)
- Java 多线程学习(1)——实现多线程的两种方式Thread/Runnable
- Java两种实现多线程方式的比较( implements Runnable 与 extends Thread )
- Java_基础—多线程程序实现的3种方式Thread和Runnable和Callable
- java 多线程实现方式Thread和Runnable之间差异
- java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable
- JAVA_创建多线程方式二——实现Runnable(忽略线程安全)
- JAVA学习第二十三课(多线程(二))- (多线程的创建方式二 :实现Runnable接口(常用))
- java实现多线程的两种方式继承Thread类和实现Runnable接口
- java实现多线程的两种方式继承Thread类和实现Runnable接口的方法
- java实现多线程的三种方式(thread、runnable、callable)
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口
- Java并发03:多线程实现三方式:继承Thread类、实现Runnable接口、实现Callable接口
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- JAVA多线程实现Runnable方式