java中的线程
java中的线程操作封装在Thread,Runnable中。
通过Thread中的相应方法可以启动线程、停止线程
每个线程都必须有run()方法(即线程体)
Thread通过调用start()方法调用fun(),从而开始线程的执行。
线程的生存周期
创建方法
Thread t=new Thread();//创建可运行的线程对象只能做开始和终止操作(start(),stop())
start()方法产生线程运行时所需要的系统资源,并将线程交给java的线程调度器等待执行。
不可运行状态:
Thread.sleep(int time)
obj.wait()//发生阻塞
obj.notify() //恢复阻塞
死亡状态:
当run()方法执行结束时属于正常死亡
调动stop()方法时为非正常死亡。
线程的构造
public Thread()
public Thread(Runnable r,String name)
public Thread(Runnable r)
public Thread(String name)
通过两中方法实现线程体
1.通过继承Thread类并重写其run()方法(程序简单不能继承别的类)
Thread t = new MyThrea();
2.提过一个实现过Runnable接口的对象A(),并将这个对象做为Thread类的一个构造参数(可以将Thread类与代码 数据(实现了Runnable接口的类)分开,可以继承其他类)
Thread t=new Thread(A);
继承Thread类
public class ThreadDemo1 {
public static void main(String[] args) {
mytread r=new mytread("t1");//设置线程名称
mytread r1=new mytread("t2");//设置线程名称
r.start();
r1.start();
}
}
var foo = 'bar';
class mytread extends Thread{
public mytread(String string) {
super(string);
}
public void run() {
for(int i=0;i<5;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date data =new Date();
System.out.println(getName()+": "+data.toLocaleString());
}
}
}
结果:
实现Runnable接口
public class ThreadDemo2 {
public static void main(String[] args) {
Thread t1=new Thread(new help(),"t1");
t1.start();
Thread t2=new Thread(new help(),"t2");
t2.start();
}
}
class help implements Runnable{
@Override
public void run() {
for(int i=0;i<5;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date date=new Date();
System.out.println(date.toLocaleString());
}
}
}
结果