JAVA多线程实现Runnable方式
来源:互联网 发布:合肥美工兼职 编辑:程序博客网 时间:2024/06/05 19:30
(一)
步骤:
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多线程实现Runnable方式
- java多线程实现Runnable
- Java实现Runnable接口方式实现多线程的优势
- JAVA 多线程的简单实现(runnable接口方式)
- java 多线程实现方式Thread和Runnable之间差异
- java实现多线程的三种方式(thread、runnable、callable)
- java多线程--实现runnable方法
- java runnable接口实现多线程
- java多线程实现:Runnable接口
- Java多线程Runnable实现方法
- 多线程实现方式---实现Runnable接口
- java 通过实现Runnable接口实现多线程
- java 用实现Runnable 接口实现多线程
- JAVA 实现Runnable接口实现多线程
- java实现多线程的两种方式继承Thread类和实现Runnable接口
- java多线程实现(thread和runnable接口两种方式以及其区别)
- Java两种实现多线程方式的比较( implements Runnable 与 extends Thread )
- GAC(Global Assembly Cache)
- Git和Repo扫盲——如何取得Android源代码
- 基本概念:源代码,字节码,编译器,虚拟机
- 为PHP安装Xdebug调试工具
- Run-time PM 详解
- JAVA多线程实现Runnable方式
- LevelDB数据库使用
- 推荐使用的软件(12年1月15日更新)
- 查看系统是否安装.net framework 3.5 sp1
- 使用bindService和服务的通信(bindService和startService的区别)
- Windows Server 2003 DNS服务器配置
- body不出现滚动条方法
- mpich2的安装与配置
- asp.net response.ContentType 下载文件的四种方法