java多线程1

2017-08-29  本文已影响0人  柳仁儿

进程

程序(任务的执行过程)--- 动态

持有资源(共享内存、共享文件)和线程 ---载体

线程

线程是系统中最小的执行单元,同一个进程中有多个线程,线程共享进程的资源

线程的交互:同步   互斥

=======================================

Java语言对线程的支持

java.lang   class  Thread    和 interface Runnable

public void run()

Thread常用方法

线程的创建

Thread()

Thread(String name)

Thread(Runnable target)

Thread(Runnable target,String name)

线程的方法

启动线程

void start()  

线程休眠

static void sleep(long millis)        

static void sleep(long millis, int nanos)

使其他线程等待当前线程终止

void join()

void join(long millis)

void join(long millis,int nanos)

当前运行线程释放处理器资源

static void yield()

获取线程引用:

返回当前运行的线程引用   static Thread currentThread()

=====================================================

正确停止JAVA 中的线程       

错误的方法  stop方法

正确的方法  使用退出标志

volatile boolean keepRunning = true;

@Override

public void run() {

while (keepRunning) {

// 发动5连击

for (int i = 0; i < 5; i++) {

System.out.println(Thread.currentThread().getName() + "进攻对方[" + i + "]");

// 让出了处理器时间,下次该谁进攻还不一定呢!

Thread.yield();

}

}

广为流传的错误方法  interrupt()

interrupt()方法初衷并不是用于停止线程

=====================================================

线程交替运行实例

public class Actor extends Thread {

public void run() {

System.out.println(getName() + "是一个演员!");

int count = 0;

boolean keepRunning = true;

while (keepRunning) {

System.out.println(getName() + "登台演出:" + (++count));

if (count == 100) {

keepRunning = false;

}

if (count % 10 == 0) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

System.out.println(getName() + "的演出结束了");

}

public static void main(String[] args) {

Thread actor = new Actor();

actor.setName("Mr.Thread");

actor.start();

Thread actressThread = new Thread(new Actress(),"Ms.Runnable");

actressThread.start();

}

}

class Actress implements Runnable {

@Override

public void run() {

System.out.println(Thread.currentThread().getName() + "是一个演员!");

int count = 0;

boolean keepRunning = true;

while (keepRunning) {

System.out.println(Thread.currentThread().getName() + "登台演出:" + (++count));

if (count == 30) {

keepRunning = false;

}

if (count % 10 == 0) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

System.out.println(Thread.currentThread().getName() + "的演出结束了");

}

}

运行结果:

Mr.Thread是一个演员!

Mr.Thread登台演出:1

Mr.Thread登台演出:2

Mr.Thread登台演出:3

Mr.Thread登台演出:4

Mr.Thread登台演出:5

Mr.Thread登台演出:6

Mr.Thread登台演出:7

Mr.Thread登台演出:8

Mr.Thread登台演出:9

Mr.Thread登台演出:10

Ms.Runnable是一个演员!

Ms.Runnable登台演出:1

Ms.Runnable登台演出:2

Ms.Runnable登台演出:3

Ms.Runnable登台演出:4

Ms.Runnable登台演出:5

Ms.Runnable登台演出:6

Ms.Runnable登台演出:7

Ms.Runnable登台演出:8

Ms.Runnable登台演出:9

Ms.Runnable登台演出:10

Mr.Thread登台演出:11

Mr.Thread登台演出:12

Mr.Thread登台演出:13

Mr.Thread登台演出:14

Mr.Thread登台演出:15

Mr.Thread登台演出:16

Mr.Thread登台演出:17

Mr.Thread登台演出:18

Mr.Thread登台演出:19

Mr.Thread登台演出:20

Ms.Runnable登台演出:11

Ms.Runnable登台演出:12

Ms.Runnable登台演出:13

Ms.Runnable登台演出:14

Ms.Runnable登台演出:15

Ms.Runnable登台演出:16

Ms.Runnable登台演出:17

Ms.Runnable登台演出:18

Ms.Runnable登台演出:19

Ms.Runnable登台演出:20

Mr.Thread登台演出:21

Mr.Thread登台演出:22

Mr.Thread登台演出:23

Mr.Thread登台演出:24

Mr.Thread登台演出:25

Mr.Thread登台演出:26

Mr.Thread登台演出:27

Mr.Thread登台演出:28

Mr.Thread登台演出:29

Mr.Thread登台演出:30

Ms.Runnable登台演出:21

Ms.Runnable登台演出:22

Ms.Runnable登台演出:23

Ms.Runnable登台演出:24

Ms.Runnable登台演出:25

Ms.Runnable登台演出:26

Ms.Runnable登台演出:27

Ms.Runnable登台演出:28

Ms.Runnable登台演出:29

Ms.Runnable登台演出:30

Mr.Thread的演出结束了

Ms.Runnable的演出结束了

上一篇 下一篇

猜你喜欢

热点阅读