java多线程实现runnable_Java多线程实现Runnable方式
本文为大家分享了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方法中去定义多个线程去执行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。
java多线程实现runnable_Java多线程实现Runnable方式相关推荐
- java多线程(一)-Thread类和Runnable接口
public class Thread extends Object implements Runnable Thread通过实现Runnable实现多态关系. Java中实现多线程,最基本2种方式: ...
- java callable 详解_详解Java Callable接口实现多线程的方式
在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...
- Java多线程(一):Runnable和Thread的基本用法
Runnable Runnable 是个函数式接口,因此可以通过lambda表达式初始化.其内部只有一个run方法,源码比较简单,如下: @FunctionalInterface public int ...
- java 线程访问控件_多线程下访问控件的方式
前言 在很多情况下,我们都会使用到多线程,在使用多线程的时候,我们很多时候又会去访问控件,这里面就会出现很多问题!!!我以一个最常见的,我们经常会用到的例子来讲讲,在提高自己水平的同时,希望能给大家带 ...
- Java高级特性增强-多线程
请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...
- Java基础篇:多线程
文章目录 1.概念:程序.进程.线程 2.线程的创建和使用 3.线程的生命周期 4.线程的同步 5.线程的通信 6.JDK5.0新增线程创建方法 1.概念:程序.进程.线程 程序(program)是为 ...
- 黑马程序员java笔记之二-----多线程
java中实现多线程操作有两种手段,一种继承自Thread类,另一种是实现Runnable接口. 一.继承Thread Thread类是在java.lang包中定义的,一个类只要继承了Thread类, ...
- java多线程系列_Java多线程实战系列
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术. [1] 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这 ...
- Java 程序中的多线程
在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...
最新文章
- ECCV2020图像分割开源论文合集
- 大话风险投资的风险-不只是独角戏(上)
- SRM598 Div1
- md5-linux_shell
- Common Lisp语言快速入门
- netflix zuul 1.x与zuul2.x之比较
- posix多线程有感--API
- mixamo网站_超全面的素材网站推荐
- Aspose.Java实现word转pdf,添加水印等操作
- win8.1 linux系统,电脑显示win8.1linux系统失效的原因及解决办法!
- 如何使用div优雅的布局
- 知乎热议:杨辉团队公开否认抄袭,网友:避重就轻仍谎称「首创」
- 3、构建并安装PHP扩展
- mybatis SqlMapConfig.xml
- /etc/fstab 官方文档
- 像素越多越好?像元的面积越小越好?
- java语言函数存储在哪个包_java专项联系题
- VMware基础架构和运营管理
- adb 连接时候不弹出授权对话框
- 软件设计师-3.数据结构与算法基础