[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线程开启
相关文章
- Linux环境下接口调试利器:cURL
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- 【Golang】反射的三大laws
- Good-code-books 前端经典常用好书分享
- git实用复习篇之一步到位!
- Python分布式任务队列Celery,Django中如何实现异步任务和定时任务
- Django应用上线前有哪些注意事项?如何使用同步或异步容器启动Django应用?
- 跟着官方文档学Python——Django Rest framework
- Go语言基础速刷手册
- 深入Git —— 从底层对象到常用命令速刷手册
- Java基础系列(25)- break、continue、goto
- 云图说|将源端MongoDB业务搬迁至华为云DDS的几种方式
- 【Google Cloud技术咨询】「Contact Center AI」引领我们走向高度智能客服的时代
- 【Git技术专题】如何使用git中的tag进行版本开发控制?
- Golang做一个IM即时通信系统
- 为什么Go的协程调度很快?
- 读猿码系列——1. gRPC+Etcd3的服务发现&负载均衡
- 读猿码系列——3. 从filebeat和go-stash深入日志收集及处理(filebeat篇)
- 读猿码系列——4. 从filebeat和go-stash深入日志收集及处理(go-stash篇)
- 读猿码系列——5.解析Golang常用定时任务库gron和cron