博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二、java实现多线程的方式?
阅读量:5344 次
发布时间:2019-06-15

本文共 3903 字,大约阅读时间需要 13 分钟。

一、同步?异步?

     下面两幅图解释了同步异步。

       

 

 二、实现多线程的方式

     1.继承Thread

        

package threaddemo;class CreateThreadDemo extends  Thread{    /**     * 线程执行的任务,执行的代码     */    @Override    public void run() {        for (int i = 0; i <30 ; i++) {            System.out.println("我是线程:"+i+ "名字:"+Thread.currentThread().getName());        }    }}/** * @version V1.0 * @description:实现线程的方式 * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */public class ThreadDemo {    /**     * 什么是进程?什么是线程?     * 多线程的应用场景?     * 多线程的优点?     * java实现多线程的方式?     *  1.集成Thread类重写run方法     */    public static void main(String[] args) {        CreateThreadDemo createThreadDemo=new CreateThreadDemo();        createThreadDemo.start();        for (int i = 0; i <30 ; i++) {            System.out.println("我是线程:"+i+ "名字:"+Thread.currentThread().getName());        }    }}

 

2.实现runable接口(推荐)

package threaddemo;class CreateThreadDemo2 implements Runnable {    /**     * 执行线程代码     */    @Override    public void run() {        for (int i = 0; i < 30; i++) {            System.out.println("我是线程:" + i + "名字:" + Thread.currentThread().getName());        }    }}/** * @version V1.0 * @description: * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */public class ThreadDemo2 {    public static void main(String[] args) {        CreateThreadDemo2 createThreadDemo2=new CreateThreadDemo2();        new Thread(createThreadDemo2).start();        for (int i = 0; i <30 ; i++) {            System.out.println("我是线程:"+i+ "名字:"+Thread.currentThread().getName());        }    }}

 

 3.使用内部类实现

package threaddemo;/** * @version V1.0 * @description:使用内部类实现 * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */public class ThreadDemo3 {    public static void main(String[] args) {        Thread thread=new Thread(new Runnable() {            @Override            public void run() {                for (int i = 0; i <30 ; i++) {                    System.out.println("我是线程:"+i+ "名字:"+Thread.currentThread().getName());                }            }        });        thread.start();        for (int i = 0; i <30 ; i++) {            System.out.println("我是线程:"+i+ "名字:"+Thread.currentThread().getName());        }    }}

 

 

三、内部类的使用(补充)

package threaddemo;abstract class Panret {    //内部类    abstract void add();}/** * @version V1.0 * @description:内部类的使用 * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */public class InternalClass {    public static void main(String[] args) {        Panret p = new Panret() {            @Override            void add() {                System.out.println("我是内部类");            }        };        //方法调用        p.add();    }}

 

四、常用api的使用

package threaddemo;/** * 常用api * getId() 获取线程Id * getName(); // 获取线程名字 * stop();  //停止 * Thread.sleep(long value); 休眠 */class CreateThreadApiUse implements Runnable {    @Override    public void run() {        for (int i = 0; i < 30; i++) {            System.out.println("线程id:" + Thread.currentThread().getId() + " 线程Name:" + Thread.currentThread().getName());           if(i==5){               //不安全不建议大家使用               Thread.currentThread().stop();           }        }    }}/** * @version V1.0 * @description: * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */public class ThreadApi {    public static void main(String[] args) {        CreateThreadApiUse createThreadApiUse = new CreateThreadApiUse();        //自定义线程名字        Thread thread = new Thread(createThreadApiUse,"我是线程的名字");        thread.start();        try {            //休眠            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();            System.out.println("线程异常");        }    }}

 

 

总结:

    1.同步异步?

    2.多线程常用的实现方式?(实现Runable方式推荐,原因:java面向接口编程,实现接口可以多继承,但是直接继承Thread将无法继承        其他的类。)

      还有其他方式实现多线程?请自行科普。

    3.内部类的使用?

    4.Thread常用api

 

有问题欢迎咨询,或者加入我的群:微信 :hsj179540

转载于:https://www.cnblogs.com/bingshu/p/11337390.html

你可能感兴趣的文章
拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)
查看>>
2017年秋季个人阅读计划
查看>>
iOS中几种定时器
查看>>
进度条
查看>>
Mac安装6.1.2版本Elasticsearch及优化配置实践
查看>>
LCA离线Tarjan,树上倍增入门题
查看>>
Part10-C语言环境初始化-C与汇编混合编程lesson4
查看>>
修改Docker容器启动配置参数
查看>>
如何把this指针转换成boost的shared_ptr
查看>>
朴素贝叶斯算法原理小结
查看>>
Android Studio添加jar包
查看>>
stl_vector去重方法
查看>>
(转载)专注的价值
查看>>
Java内存泄露监控工具:JVM监控工具介绍
查看>>
WPF入门教程(十六)命名空间XAML(转)
查看>>
gridview列显示,截取其中前面的几个字显示出来,当鼠标放上去的时候显示全部...
查看>>
Django开发经验
查看>>
C# Delegate & Event(New)
查看>>
Numpy中Meshgrid函数介绍及2种应用场景
查看>>
应用程序正常初始化(0xc0150002)失败
查看>>