您的位置:首页 > 编程语言 > Java开发

java创建线程两种方法

2015-05-06 22:12 459 查看


/*
进程:是一个正在执行中的程序
每一个进程执行都有执行顺序,该顺序是一个执行路径,或叫控制单元

线程:就是进程中一个独立的控制单元
线程在控制着进程的执行

一个进程至少包含一个线程

Java VM 启动时会有个进程java.exe
该进程中至少有一个线程复制java程序的执行,这个线程运行的代码存在于main方法中,
该线程称之为主线程
JVM启动不止一个线程,还有复制垃圾回收机制的线程

创建线程:(1)继承Thread类;复写run方法;创建对象,调用start方法
(2)实现Runnable接口,复写run方法,建立线程对象,传递Runnable子类对象给Thread类构造函数

*/
package pack;

public class Main {

public static void sys(Object obj) {
System.out.println(obj);
}

public static void main(String[] args) {
//method1();
//method2(); //继承Thread方法创建线程,实例:4窗口卖票
method3();//实现Runnable方法创建线程,实例:4窗口卖票
}

public static void method1() {
Demo d1 = new Demo("one---"); //创建一个线程
Demo d2 = new Demo("two---"); //创建一个线程
d1.start();
d2.start();
for(int i=0;i<20;i++)
sys("main run");
}

public static void method2() {
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();

}

public static void method3() {
TicketDemo t = new TicketDemo();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}

class Demo extends Thread {
Demo(String name) {
super(name); //父类定义了getName方法,实现自定义线程名称,默认为Thread0,1
}

public void run() {
for(int i=0;i<20;i++)
//Main.sys(this.getName()+"demo run");
//上下两句无差别,currentThread获取当前线程对象,即this
Main.sys(Thread.currentThread().getName()+"demo run");
}
}

class Ticket extends Thread {
static int tickets = 200; //一共200张票,一定要static,4窗口公用200张
public void run() {
while(true) {
if(tickets>0)
Main.sys(this.getName()+"---"+tickets--);
}

}
}

class TicketDemo implements Runnable {
int tickets = 100;
public void run() {
while(true) {
if(tickets>0)
Main.sys(Thread.currentThread().getName()+"---"+tickets--);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 线程