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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 判断字符串中是否包含中文的实例详解
2023-11-06 13:17:18
![](https://img.aspxhome.com/file/2023/3/58913_0s.png)
C#中Invoke的用法讲解
2023-10-26 03:24:36
用intellij Idea加载eclipse的maven项目全流程(图文)
2021-09-12 06:11:16
![](https://img.aspxhome.com/file/2023/2/60082_0s.jpg)
spring cloud Ribbon用法及原理解析
2021-11-28 15:27:21
java获取当前时间的四种方法代码实例
2023-11-28 19:22:53
JAVA 内存溢出案例汇总
2022-02-16 08:49:22
![](https://img.aspxhome.com/file/2023/7/61927_0s.jpg)
Java编程使用箱式布局管理器示例【基于swing组件】
2022-08-12 14:09:14
![](https://img.aspxhome.com/file/2023/4/76194_0s.jpg)
Java学习基础之安装JDK/配置JDK环境&IEDA工具安装
2023-02-09 13:02:40
![](https://img.aspxhome.com/file/2023/5/60315_0s.png)
springboot自定义异常视图过程解析
2023-06-29 09:44:36
![](https://img.aspxhome.com/file/2023/3/71173_0s.png)
浅谈Java解释器模式
2021-08-23 23:45:59
![](https://img.aspxhome.com/file/2023/8/68708_0s.png)
java实现文件夹解压和压缩
2022-06-07 03:00:39
基于java实现租车管理系统
2022-02-08 12:48:49
![](https://img.aspxhome.com/file/2023/8/73038_0s.jpg)
在idea中将创建的java web项目部署到Tomcat中的过程图文详解
2022-10-24 23:58:25
![](https://img.aspxhome.com/file/2023/7/64147_0s.png)
解析android中的dip,dp,px,sp和屏幕密度
2023-09-26 20:44:38
Springboot2.1.6集成activiti7出现登录验证的实现
2022-08-03 10:44:48
![](https://img.aspxhome.com/file/2023/0/77410_0s.png)
Java集合中的fail-fast(快速失败)机制详解
2023-05-10 16:31:33
Java详解Swing中的几种常用按钮的使用
2023-12-04 21:44:30
![](https://img.aspxhome.com/file/2023/7/76197_0s.png)
解决Spring Cloud Feign 请求时附带请求头的问题
2022-12-11 04:29:46
Mybatis返回插入的主键问题解决方案
2023-05-06 02:58:03
java 中模式匹配算法-KMP算法实例详解
2022-01-30 09:08:08
![](https://img.aspxhome.com/file/2023/7/63807_0s.jpg)