关于启动、设置和获取线程名称
package xiancheng;
/*
* 继承Thread类
定义一个类MyThread继承Thread类
在MyThread类中重写run()方法
创建MyThread类的对象
启动线程
*/
public class Duoxiancheng {
public static void main(String[] args) {
// MyThread my1=new MyThread();
// MyThread my2=new MyThread();
/*
* 两个小问题:
为什么要重写run()方法?
因为run()是用来封装被线程执行的代码
run()方法和start()方法的区别?
run():封装线程执行的代码,直接调用,相当于普通方法的调用
start():启动线程,然后由JVM调用此线程的run()方法
*/
/*
Thread类中设置和获取线程名称的方法
void setName(String name):将此线程的名称更改为等于参数name
String getName():返回此线程的名称
*/
//void setName(String name):将此线程的名称更改为等于参数name
// my1.setName("one");
// my2.setName("two");
//用带参构造来给name
// MyThread my1=new MyThread("one");
// MyThread my2=new MyThread("two");
// void start() 此线程开始执行。Java虚拟机调用此线程的run()方法
// my1.start();
// my2.start();
//static Thread currentThread ()返回对当前正在执行的线程对象的引用
System.out.println(Thread.currentThread().getName()); //输出main
}
}
package xiancheng;
public class MyThread extends Thread {
//无参构造
public MyThread() {}
//带参构造
public MyThread(String name) {
super(name);
}
public void run() {
for(int i=0;i<100;i++) {
// String getName():返回此线程的名称
System.out.println(getName()+":"+i);
}
}
}
关于设置和获取线程优先级
package xiancheng;
/*
Thread类中设置和获取线程优先级的方法
public final int getPriority():返回此线程的优先级
public final void setPriority(int newPriority):更改此线程的优先级
*/
public class Xianchengyouxianji {
public static void main(String[] args) {
MyThread my1=new MyThread();
MyThread my2=new MyThread();
// public final int getPriority():返回此线程的优先级
// System.out.println( my1.getPriority());
// System.out.println( my2.getPriority());
//public final void setPriority(int newPriority):更改此线程的优先级
//线程默认优先级是5;线程优先级的范围是:1-10
//线程优先级高仅仅表示线程获取的CPU时间片的几率高,但是要在次数比较多,或者多次运行的时候才能看到你想要的效果
my1.setPriority(10);
my2.setPriority(5);
//启动线程
my1.start();
my2.start();
}
}
package xiancheng;
public class Xcyxjtext extends Thread {
public void run() {
for(int i=0;i<100;i++) {
// String getName():返回此线程的名称
System.out.println(getName()+":"+i);
}
}
}
关于线程控制:
(1):static void sleep(Long millis):使当前正在执行的线程停留(暂停执行)指定的毫秒数
package xiancheng;
//static void sleep(Long millis):使当前正在执行的线程停留(暂停执行)指定的毫秒数
public class Threadsleepdemo {
public static void main(String[] args) {
Threadsleep my1=new Threadsleep();
Threadsleep my2=new Threadsleep();
Threadsleep my3=new Threadsleep();
my1.setName("曹操");
my2.setName("刘备");
my3.setName("孙权");
my1.start();
my2.start();
my3.start();
}
}
package xiancheng;
public class Threadsleep extends Thread{
public void run() {
for(int i=0;i<100;i++) {
// String getName():返回此线程的名称
System.out.println(getName()+":"+i);
//static void sleep(Long millis):使当前正在执行的线程停留(暂停执行)指定的毫秒数
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
(2):void join():等待这个线程死亡
package xiancheng;
//void join():等待这个线程死亡
public class Treadjoindemo {
public static void main(String[] args) {
Treadjoin my1=new Treadjoin();
Treadjoin my2=new Treadjoin();
Treadjoin my3=new Treadjoin();
my1.setName("曹操");
my2.setName("刘备");
my3.setName("孙权");
my1.start();
//void join():等待这个线程死亡
try {
my1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
my2.start();
my3.start();
}
}
package xiancheng;
public class Treadjoin extends Thread {
public void run() {
for(int i=0;i<100;i++) {
// String getName():返回此线程的名称
System.out.println(getName()+":"+i);
}
}
}
(3):void setDaemon (boolean on):将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出
package xiancheng;
//void setDaemon (boolean on):将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出
public class ThreadDaemondemo{
public static void main(String[] args) {
ThreadDaemon my1=new ThreadDaemon();
ThreadDaemon my2=new ThreadDaemon();
ThreadDaemon my3=new ThreadDaemon();
my1.setName("曹操");
my2.setName("刘备");
//设置主线程为孙权
Thread.currentThread().setName("孙权");
//设置守护线程
my1.setDaemon(true);
my2.setDaemon(true);
my1.start();
my2.start();
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
package xiancheng;
public class ThreadDaemon extends Thread {
public void run() {
for(int i=0;i<100;i++) {
// String getName():返回此线程的名称
System.out.println(getName()+":"+i);
}
}
}