[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线程开启
[javaSE] 看博客学习多线程的创建方式和优劣比较和PHP多线程的更多相关文章
- [javaSE] 看博客学习java并发编程
共享性 多线程操作同一个数据,产生线程安全问题 新建一个类ShareData 设计一个int 型的成员变量count 设计一个成员方法addCount(),把count变量++ 在main函数中开启多 ...
- [PHP] 看博客学习观察者模式
具体应用场景是,当subject的某个动作需要引发一系列不同对象的动作(比如你是一个班长要去通知班里的某些人),与其一个一个的手动调用触发的方法(私下里一个一个通知),不如维护一个列表(建一个群),这 ...
- [PHP] 看博客学习插入排序
定义数组长度变量$len,使用count()函数,参数:数组 for循环数组,条件:从第二个开始,遍历数组,循环内 定义临时变量$temp,赋值当前元素 for循环数组,条件:遍历当前元素前面的所有元 ...
- [android] 看博客学习hashCode()和equals()
equals()是Object类提供的一个方法,众所周知,每一个java类都继承自Object,所以说每一个对象都有一个equals()方法,我们在用这个方法时却一般重写这个方法 Object类中eq ...
- [android] 看博客学习Android常见的几种RuntimeException
异常分为两种: 1.编译时异常 当编译时异常抛出时,需要对其进行处理声明,否则编译不通过 2.运行时异常 编译时不检测,运行时 如果抛出,程序会立刻停止 NullPointerException 空指 ...
- [css3] 看博客学习别人的旋转的星球
定义一个div 太阳轨道sunline,边框显示出来,定义position为relative #sunline{ width: 500px; height: 500px; border:2px sol ...
- FPGA一个博客学习
FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM
- 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解
不多说,直接上干货! 什么是进程? 正在进行中的程序(直译). 什么是线程? 就是进程中一个负责程序执行的控制单元(执行路径). 见 牛客网Java刷题知识点之进程和线程的区别 什么是多线程? 一个进 ...
- Java中的多线程的创建方式
首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合.即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源 ...
随机推荐
- Linux下可视化空间分析工具ncdu
场景:磁盘空间占满后快速查找某个目录(子目录)占用空间大. ncdu /var (分析后按左右键查看即可)
- nginx 常见错误释义
错误信息 错误说明 "upstream prematurely(过早的) closed connection" 请求uri的时候出现的异常,是由于upstream还未返回应答给用户 ...
- Windows核心编程:第3章 内核对象
Github https://github.com/gongluck/Windows-Core-Program.git //第3章 内核对象.cpp: 定义应用程序的入口点. // #include ...
- 作业调度系统quartz.net
任务调度在我们日常开发过程中非常常见,比如:每天晚上0点自动执行某某操作:每周三晚上2点执行某某操作:......当然,我们处理这类问题的方法也有很多,比如:sql的自动任务:windows上创建任务 ...
- Java反射机制介绍
1. 文档概述 Java反射是Java被视为动态(或准动态)语言的一个关键性质,Java反射机制容许程序在运行时加载.探知.使用编译期间完全未知的classes.换言之,Java可以加载一个运行时才得 ...
- ASP.NET Core 2.0 多应用实现Cookie共享
前言 .NET Core 2.0 发布之后,在Authentication中间件部分,相关API有不少改动(官方文档),本文主要讲的就是实现应用Cookie共享,对Cookie中间件使用不了解的可以去 ...
- Swift5 语言参考(三) 类型
在Swift中,有两种类型:命名类型和复合类型.一个名为类型是当它的定义可以给出一个特定名称的类型.命名类型包括类,结构,枚举和协议.例如,名为的用户定义类的实例MyClass具有该类型MyClass ...
- java后端导出excel表格
转载 :https://www.cnblogs.com/zhaoyuwei/p/9038135.html 不需要在实体类些@Excel(name = "登录名", width = ...
- 传染病传播模型(SIS)Matlab代码
function spreadingability=sir(A,beta,mu) for i=1:length(A) for N=1:50%随机次数 InitialState=zeros(length ...
- MethodImplOptions.Synchronized的一点讨论
Review代码发现有一个方法加了[MethodImpl(MethodImplOptions.Synchronized)] 属性,这个属性的目的,从名字上就可以看出,是要对所有线程进行同步执行. 对方 ...