大作业是选课系统需要多线程。疯狂学习中。为了避免遗忘以blog记录一下~
java中使用Thread类来表示线程,所以所有的线程对象都是Thread或者是他的子类。
方法一、定义Thread类的子类,在里面重写run方法,run里面的是线程真正要执行的任务。
但是需要注意,在启动线程的时候要使用start而不是run。
主线程(也就是main)本身也是一个线程。程序在执行过程中至少会有一个主线程
Thread类本身有静态方法和实例方法,静态方法currentThread直接Thread.currentThread()就可以,getName()这种实例方法使用具体对象调用。也可以使用setName修改名称。(eg:this.setName(String name))
public class FirstThread extends Thread { private int i; public void run() { for(;i<100;i++) { System.out.println(this.getName()+""+i); } } public static void main(String args[]) { for(int i=0;i<100;i++) { System.out.println(Thread.currentThread().getName()+""+i); if(i==20) { new FirstThread().start(); new FirstThread().start(); } } } }
这里面的i在三个线程里面是独立的,因此结果输出的i是乱序的。
另外,虽然从i=20开始启动两个新的线程,但是顺序仍然是不确定的,(在本次执行中,main70多才出现Thread0)
thread0和thread1顺序也是不稳定的
thread010是thread0的,thread10是在thread1里面的0号。(两者不是一一交替进行的,具有一定的随机性,这也是在真正的多线程中需要锁和信号量的主要原因。)