Thread线程
程序员文章站
2022-05-18 11:15:21
...
Thread
1.重新定义线程类继承线程Thread
继承类代码:
public class MyThread extends Thread {
//重写Thread中的run方法
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("run"+i);
}
}
}
测试类代码:
public class Demo01Thread {
public static void main(String[] args) {
MyThread mt=new MyThread();
// mt.run();//单线程方法,先执行这个方法!
mt.start();//和下面的竞争使用cpu//Thread-0
for (int i = 0; i < 1024; i++) {
System.out.println("main"+i);
}
}
}
两个线程之间互相竞争
原理图(来源于网上):
run 和 start
2.使用Runnable接口方法
2.1使用接口实现类中重写Runnable接口的实现类对象代码:
public class RunnableImpl implements Runnable {
//* 2.在实现类中重写Runnable接口的实现类对象
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+"----->"+i);
}
}
}
实现类代码:
public class Demo01Runnable {
public static void main(String[] args) {
//创建一个Runnable接口的实现类对象
RunnableImpl run = new RunnableImpl();
//4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
Thread t1=new Thread(run);
t1.start();
//或者直接传入新的实现类对象!
Thread t2=new Thread(new RunnableImpl());
//5.调用Thread类中的start方法,开启新的线程执行run方法*/
t2.start();
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+"----->"+i);
}
}
}
2.2匿名内部类实现Runnable实现类对象
关于匿名内部类:
匿名内部类实现线程的创建
-
匿名:没有名字
-
内部类:写在其他类内部的类
-
匿名内部类的作用:简化代码
-
把子类继承父类,重写父类方法,创建子类对象合一一步完成
-
把实现类接口,重写接口中的方法,创建实现类对象合成一步完成
-
匿名内部类的最终产物:子类/实现类对象,而这个类没有名字
-
格式
-
new 父类/接口(){重写父类/接口中的方法};
代码:public class Demo01InnerClassThread { public static void main(String[] args) { //接口实现方法 Runnable r=new Runnable() { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"---------->"+i); } } }; new Thread(r).start(); //简化程序 new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"---------->"+i); } } }).start(); } }
getname,setname方法(Mythread为例)
测试类
public class Demo01SetThreadName {
public static void main(String[] args) {
MyThread t=new MyThread();
//通过thread中setname()方法,设置线程的名字!
t.setName("线程之我和我的祖国");
t.start();
Thread.currentThread().setName("main主线程");//设置主线程的名称
System.out.println(Thread.currentThread().getName());
System.out.println(new Thread("使用构造方法,让父类给新的线程起名称").getName());
}
}
上一篇: 用cookies实现闪电登录论坛方法
下一篇: 关于使用存储过程创建分页