<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">方法二:</span>
package com.runnable;
public class Hello implements Runnable{
private String name;
public Hello(String name){
this.name = name;
}
public static void main(String[] args) {
Hello hello1 = new Hello("线程1");
Thread demo1 = new Thread(hello1);
Hello hello2 = new Hello("线程2");
Thread demo2 = new Thread(hello2);
demo1.start();
demo2.start();
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name+" : "+ i);
}
}
}
2.关于资源共享的创建线程的选择
因为runnable可以实现资源共享,例如,2000张票,这就是资源共享。
例子:
class MyThread implements Runnable{
private int ticket = 2000; //5张票
public void run() {
for (int i=0; i<=20; i++) {
if (this.ticket > 0) {
System.out.println(Thread.currentThread().getName()+ "正在卖票"+this.ticket--);
}
}
}
}
public class lzwCode {
public static void main(String [] args) {
MyThread my = new MyThread();
new Thread(my, "1号窗口").start();
new Thread(my, "2号窗口").start();
new Thread(my, "3号窗口").start();
}
}
3.关于创建线程的这两种方法的区别
(1)适合多个相同的程序代码的线程去处理同一个资源
(2)可以避免java中的单继承的限制
(3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。
注:main方法其实也是一个线程,zaijava 中所有的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源,在java中,每次程序运行至少启动2个线程,一个是main线程,一个是垃圾回收线程。因为每当使用Java命令执行一个类的时候,实际上都会启动一个jvm,每一个jvm实际上就是在操作系统中启动了一个进程
4.判断线程是否启动
调用demo.isAlive();//为true表示启动,反之为false