专栏首页陶士涵的菜地[javaSE] 看博客学习多线程的创建方式和优劣比较和PHP多线程

[javaSE] 看博客学习多线程的创建方式和优劣比较和PHP多线程

通过实现Runnable接口创建线程

获取Thread对象,new出来,构造函数参数:Runnable对象

Runnable是一个接口,定义一个类MyRunnable实现Runnable接口,实现run()方法,

重写run()方法,编写业务逻辑

调用Thread.currentThread()方法获取当前Thread对象

调用Thread对象的start()方法

package com.tsh.test;

public class Home {

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        //开启两个线程处理同一个目标对象的资源
        new Thread(myRunnable).start();
        new Thread(myRunnable).start();
    }

}

class MyRunnable implements Runnable {
    private int nums=10;
    @Override
    public void run() {
        while(nums-- > 0){
            System.out.println(Thread.currentThread().getName()+"==="+nums);
        }
        
    }

}

结果:

Thread-0===8

Thread-1===8

Thread-1===6

Thread-0===7

Thread-0===4

Thread-0===3

Thread-0===2

Thread-1===5

Thread-1===0

Thread-0===1

优点:

线程类只是实现了Runnable接口,还可以继承别的类

可以多个线程共享同一个目标对象

缺点:

逻辑稍微复杂

获取当前线程对象只能使用Thread.currentThread()方法

继承Thread类

定义一个类MyThread继承Thread,重写run()方法

在run()方法中编写业务逻辑,使用this就是当前Thread对象

获取Thread对象,通过new MyThread()

调用Thread对象的start()方法

package com.tsh.test;

public class Home {

    public static void main(String[] args) {
        //开启两个线程
        new MyThread().start();
        new MyThread().start();
    }

}
class MyThread extends Thread{
    private int nums=10;
    @Override
    public void run() {
        while(nums-- > 0){
            System.out.println(this.getName()+"==="+nums);
        }
    }
}

结果:

Thread-0===9

Thread-1===9

Thread-1===8

Thread-0===8

Thread-1===7

Thread-1===6

Thread-0===7

Thread-1===5

Thread-1===4

Thread-0===6

Thread-0===5

Thread-0===4

Thread-0===3

Thread-1===3

Thread-1===2

Thread-0===2

Thread-0===1

Thread-1===1

Thread-0===0

Thread-1===0

优点:

编写简单,this代表当前Thread对象

缺点:

线程类不能再继承其他父类

PHP安装pthreads扩展教程

http://my.oschina.net/yanhx/blog/198114

注意扩展所对应的php版本号,windows系统扩展下载地址

http://windows.php.net/downloads/pecl/releases/pthreads/

手册地址

http://php.net/manual/zh/book.pthreads.php

<?php
/**
 * PHP多线程
 */
class MyThread extends Thread{
    public function run(){
        echo $this->getThreadId()."线程开启<br/>";
    }
}
$myThread=new MyThread();
$myThread->start();
$myThread=new MyThread();
$myThread->start();
$myThread=new MyThread();
$myThread->start();
?>

结果:

13104线程开启

6240线程开启

8832线程开启

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [javaSE] 多线程(join方法)

    多条线程并发执行,随机切换,调用join()方法,会使当前线程所在的线程(一般主线程)冻结,直到当前线程结束,所在的线程才恢复继续执行

    陶士涵
  • [Go] 实战项目在线客服GO-FLY -在gin框架使用IP识别库转换IP为城市

    注意city.free.ipdb文件要放到当前运行程序路径的相对目录下 , 我是放在了 ./config/下面了

    陶士涵
  • [android] 手机卫士接收短信指令执行相应操作

    通过广播接收者,接收到短信,对短信内容进行判断,如果为我们指定的值就执行相应的操作

    陶士涵
  • 并发基础(三): java线程优先级小试牛刀

    好好学java
  • 史上最全 Java 中各种锁的介绍

    在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。锁旨在强制实施互斥排他、并发控制策略。 ...

    java金融
  • 面试|再次讲解Threadlocal使用及其内存溢出

    浪尖整理本文主要是想帮助大家完全消化面试中常见的ThreadLocal问题。希望读懂此文以后大家可以掌握(没耐心的可以直接阅读底部总结):

    Spark学习技巧
  • 某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?

    这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。

    良月柒
  • 美团面试题:JVM堆内存溢出后,其他线程是否可继续工作?

    最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域...

    Spark学习技巧
  • Java线程(八):锁对象Lock-同步问题更完美的处理方式

            Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的...

    高爽
  • 某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?

    最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域...

    芋道源码

扫码关注云+社区

领取腾讯云代金券