java 多线程笔记_Java多线程学习笔记(全).pdf

Java多线程学习笔记(全)

一.线程的创建和启动

java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每条线程

的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序流的代码)。Java使用run方法

来封装这样一段程序。

1.继承Thread类创建线程类

/**继承Thread来创建线程类*/

public class FirstThread extends Thread {

private int i;

//重写run方法,run方法的方法体就是线程执行体

public void run() {

for(;i<10;i++){

System.out.println(this.getName()+":"+i);

}

}

public static void main(String []args){

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

System.out.println(Thread.currentThread().getName()+" .."+i);

if(i==10){

System.out.println("");

new FirstThread().start();

new FirstThread().start();

System.out.println("");

}

}

}

}

结果:红色部分每次运行都不一致,因为多线程也是并发的

main ..0

main ..1

main ..2

main ..3

main ..4

main ..5

main ..6

main ..7

main ..8

main ..9

main ..10

Thread-0:0

Thread-1:0

Thread-1:1

Thread-1:2

Thread-1:3

Thread-0:1

Thread-1:4

Thread-1:5

main ..11

Thread-1:6

Thread-1:7

Thread-1:8

Thread-1:9

Thread-0:2

Thread-0:3

main ..12

main ..13

总结 :从上面结果可以看出Thread-0和Thread-1两条线程输出的 i变量都不连续(注意:i

变量是 FirestThread 的实例属性,而不是局部变量,但因为程序每次创建线程都会创建一个

FirstThread对象,所以Thread-0和Thread-1不能共享该实例属性)。

使用继承Thread类的方法来创建线程类,多条线程之间无法共享线程类的实例变量。

2.实 Runnable接口创建线程类

public class SecondThread implements Runnable {

private int i;

public void run() {

for(;i<20;i++){

System.out.println(Thread.currentThread().getName()+":"+i);

}

}

public static void main(String [] args){

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

System.out.println(Thread.currentThread().getName()+" .."+i);

if(i==10){

SecondThread st=new SecondThread();

//通过new Thread (Runable target,String name)来创建新线程

new Thread(st,"线程1").start();

new Thread(st,"线程2").start();

}

}

}

结果:红色部分每次运行都不一致,因为多线程也是并发的

main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值