通过实现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多线程的更多相关文章

  1. [javaSE] 看博客学习java并发编程

    共享性 多线程操作同一个数据,产生线程安全问题 新建一个类ShareData 设计一个int 型的成员变量count 设计一个成员方法addCount(),把count变量++ 在main函数中开启多 ...

  2. [PHP] 看博客学习观察者模式

    具体应用场景是,当subject的某个动作需要引发一系列不同对象的动作(比如你是一个班长要去通知班里的某些人),与其一个一个的手动调用触发的方法(私下里一个一个通知),不如维护一个列表(建一个群),这 ...

  3. [PHP] 看博客学习插入排序

    定义数组长度变量$len,使用count()函数,参数:数组 for循环数组,条件:从第二个开始,遍历数组,循环内 定义临时变量$temp,赋值当前元素 for循环数组,条件:遍历当前元素前面的所有元 ...

  4. [android] 看博客学习hashCode()和equals()

    equals()是Object类提供的一个方法,众所周知,每一个java类都继承自Object,所以说每一个对象都有一个equals()方法,我们在用这个方法时却一般重写这个方法 Object类中eq ...

  5. [android] 看博客学习Android常见的几种RuntimeException

    异常分为两种: 1.编译时异常 当编译时异常抛出时,需要对其进行处理声明,否则编译不通过 2.运行时异常 编译时不检测,运行时 如果抛出,程序会立刻停止 NullPointerException 空指 ...

  6. [css3] 看博客学习别人的旋转的星球

    定义一个div 太阳轨道sunline,边框显示出来,定义position为relative #sunline{ width: 500px; height: 500px; border:2px sol ...

  7. FPGA一个博客学习

    FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM

  8. 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解

    不多说,直接上干货! 什么是进程? 正在进行中的程序(直译). 什么是线程? 就是进程中一个负责程序执行的控制单元(执行路径). 见 牛客网Java刷题知识点之进程和线程的区别 什么是多线程? 一个进 ...

  9. Java中的多线程的创建方式

    首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合.即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源 ...

随机推荐

  1. redhat安装docker

    一.禁用selinux 由于Selinux和LXC有冲突,所以需要禁用selinux.编辑/etc/selinux/config,设置两个关键变量.     SELINUX=disabled  SEL ...

  2. python安装mysql-python依赖包

    # 背景 新公司,对换工作了!接口自动化使用的是python的behave框架,因此需要折腾python了,而公司配的笔记本是windows的,因此要在windows下折腾python了 # 步骤 项 ...

  3. NET npoi帮助类

    nuget添加npoi /// <summary> /// npoi帮助类 /// </summary> public static class NpoiHelper { // ...

  4. XAML 调试工具 不见了?

    XAML调试工具不见了怎么办? 1.调试---> 选项---> 选中 启用XAML的UI调试工具 2.调试---> 选项---> 禁用 使用托管兼容模式 欧了!

  5. .net图表之ECharts随笔06-这才是最简单的

    今天搞柱形图的时候,发现了一个更简单的用法.那就是直接使用带all的那个js文件 基本步骤: 1.为ECharts准备一个具备大小(宽高)的Dom 2.ECharts的js文件引入(echarts-a ...

  6. jQuery基础(2)

    一.jQuery的属性操作 jQuery的属性操作分为四部分: html标签属性操作:是对html文档中的标签属性进行读取,设置和移除操作.比如attr().removeAttr(): DOM属性操作 ...

  7. Spring Boot中使用Swagger2构建RESTful API文档

    在开发rest api的时候,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题: 1.由于接口众多,并且细 ...

  8. vscode 学习笔记 —— 调试 (以 node 为例)

    一.建立配置文件 1.选择你的项目 2.选择你项目的语言 3.当前项目路径下生成 .vscode/launch.json { // Use IntelliSense to learn about po ...

  9. 阿里云RDS数据库备份文件恢复到本地数据库

    参考这里:https://help.aliyun.com/knowledge_detail/41817.html 第4.2步要多注释掉一些(应该根据实际报错来注释): [mysqld] innodb_ ...

  10. Only the original thread that created a view hierarchy can touch its views解决办法

    这周操作系统作业布置了一个作业,内容是做个小软件,来模拟消费者生产者问题,作业实现起来不来,因为之前写过这个算法,所以关键步骤就是在消费和生产的时候更新缓存区的UI控件就行,之后问题就来了,出现了标题 ...