通过实现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线程开启