Java多线程实现Runnable方式

作者:Francis-Yu 时间:2022-06-29 17:09:46 

本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下

(一)步骤

 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方法中去定义多个线程去执行。

来源:https://blog.csdn.net/VLTIC/article/details/7099740

标签:Java,多线程,Runnable
0
投稿

猜你喜欢

  • Java 判断字符串中是否包含中文的实例详解

    2023-11-06 13:17:18
  • C#中Invoke的用法讲解

    2023-10-26 03:24:36
  • 用intellij Idea加载eclipse的maven项目全流程(图文)

    2021-09-12 06:11:16
  • spring cloud Ribbon用法及原理解析

    2021-11-28 15:27:21
  • java获取当前时间的四种方法代码实例

    2023-11-28 19:22:53
  • JAVA 内存溢出案例汇总

    2022-02-16 08:49:22
  • Java编程使用箱式布局管理器示例【基于swing组件】

    2022-08-12 14:09:14
  • Java学习基础之安装JDK/配置JDK环境&IEDA工具安装

    2023-02-09 13:02:40
  • springboot自定义异常视图过程解析

    2023-06-29 09:44:36
  • 浅谈Java解释器模式

    2021-08-23 23:45:59
  • java实现文件夹解压和压缩

    2022-06-07 03:00:39
  • 基于java实现租车管理系统

    2022-02-08 12:48:49
  • 在idea中将创建的java web项目部署到Tomcat中的过程图文详解

    2022-10-24 23:58:25
  • 解析android中的dip,dp,px,sp和屏幕密度

    2023-09-26 20:44:38
  • Springboot2.1.6集成activiti7出现登录验证的实现

    2022-08-03 10:44:48
  • Java集合中的fail-fast(快速失败)机制详解

    2023-05-10 16:31:33
  • Java详解Swing中的几种常用按钮的使用

    2023-12-04 21:44:30
  • 解决Spring Cloud Feign 请求时附带请求头的问题

    2022-12-11 04:29:46
  • Mybatis返回插入的主键问题解决方案

    2023-05-06 02:58:03
  • java 中模式匹配算法-KMP算法实例详解

    2022-01-30 09:08:08
  • asp之家 软件编程 m.aspxhome.com