这节学习了JAVA多线程中的常用成员方法
1.成员方法列表
2.第一部分(前四个方法)
细节
方法1/方法2
String getName() 返回此线程的名称
void setName(string name)设置线程的名字(构造方法也可以设置名字)
测试
package AText.多线程.T04_Threadmethod.P1;
public class Demo {
public static void main(String[] args) {
P1Class pc = new P1Class();
pc.setName("PPP1");
pc.start();
}
}
package AText.多线程.T04_Threadmethod.P1;
public class P1Class extends Thread{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(getName() + "线程执行");
}
}
}
测试结果
PPP1线程执行
PPP1线程执行
PPP1线程执行
PPP1线程执行
... ...
方法3
static Thread currentThread()获取当前线程的对象
测试
package AText.多线程.T04_Threadmethod.P3;
public class Demo {
public static void main(String[] args) {
Thread t = Thread.currentThread();
System.out.println(t.getName());
}
}
测试结果
main
方法4
sleep(long time) 让线程休眠指定的时间,单位为毫秒
测试
package AText.多线程.T04_Threadmethod.P4;
public class Demo {
public static void main(String[] args) {
P4Class pc1 = new P4Class("PC1");
P4Class pc2 = new P4Class("PC2");
pc1.start();
pc2.start();
}
}
package AText.多线程.T04_Threadmethod.P4;
public class P4Class extends Thread{
public P4Class() {
}
public P4Class(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(getName() + "程序执行:" + i);
}
}
}
测试结果
PC1程序执行:0
PC2程序执行:0
PC1程序执行:1
PC2程序执行:1
PC1程序执行:2
PC2程序执行:2
PC1程序执行:3
PC2程序执行:3... ...
3.第二部分
方法5(线程的优先级)
测试
package AText.多线程.T04_Threadmethod.P5;
public class Demo {
public static void main(String[] args) {
P5Class pc1 = new P5Class();
P5Class pc2 = new P5Class();
pc1.setPriority(1);pc1.setName("低优先级线程");
pc2.setPriority(10);pc2.setName("高优先级线程");
pc1.start();
pc2.start();
}
}
package AText.多线程.T04_Threadmethod.P5;
public class P5Class extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() + "线程执行" + i);
}
}
}
测试结果
... ...
高优先级线程线程执行0
高优先级线程线程执行1
低优先级线程线程执行5
高优先级线程线程执行2
低优先级线程线程执行6
低优先级线程线程执行7... ...
方法6(守护线程)
测试(两个类的创建和一个测试程序)
package AText.多线程.T04_Threadmethod.P6;
public class P6Class1 extends Thread{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程一执行:" + i);
}
}
}
package AText.多线程.T04_Threadmethod.P6;
public class P6Class2 extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("线程二(守护线程)执行:" + i);
}
}
}
package AText.多线程.T04_Threadmethod.P6;
public class Demo {
public static void main(String[] args) {
P6Class1 p1 = new P6Class1();
P6Class2 p2 = new P6Class2();
p2.setDaemon(true);//设置为守护线程
p1.start();
p2.start();
}
}
测试结果
线程一执行:0
线程一执行:1
线程一执行:2
线程一执行:3
线程二(守护线程)执行:0
线程一执行:4
线程一执行:5
线程二(守护线程)执行:1
线程一执行:6
线程一执行:7
线程一执行:8
线程一执行:9
线程二(守护线程)执行:2
线程二(守护线程)执行:3
线程二(守护线程)执行:4
线程二(守护线程)执行:5
线程二(守护线程)执行:6
线程二(守护线程)执行:7
线程二(守护线程)执行:8
线程二(守护线程)执行:9
线程二(守护线程)执行:10
线程二(守护线程)执行:11
线程二(守护线程)执行:12
线程二(守护线程)执行:13
线程二(守护线程)执行:14
可以看到测试结果中,线程二(守护线程)设置了100次循环,却只执行在14次就停止了,这是因其设置为守护线程,线程一结束后,过段时间线程二(守护线程)就会自动结束
方法7(礼让线程/出让线程)
测试
package AText.多线程.T04_Threadmethod.P7;
public class Demo {
public static void main(String[] args) {
P7Class pc1 = new P7Class();
P7Class pc2 = new P7Class();
pc1.setName("线程一");
pc2.setName("线程二");
pc1.start();
pc2.start();
}
}
package AText.多线程.T04_Threadmethod.P7;
public class P7Class extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() + "线程执行" + i);
//表示出让CPU的控制权
Thread.yield();
}
}
}
测试结果
...
线程一线程执行36
线程二线程执行51
线程一线程执行37
线程二线程执行52
线程二线程执行53
线程二线程执行54
线程二线程执行55
线程二线程执行56
线程一线程执行38
线程二线程执行57
线程一线程执行39
线程二线程执行58
线程一线程执行40...
(会让线程的分布尽可能的均匀)
方法8(插入线程/插队线程)
测试
package AText.多线程.T04_Threadmethod.P8;
public class Demo {
public static void main(String[] args) throws InterruptedException {
P8Class pc = new P8Class();
pc.start();
//表示把pc这个线程插入到当前线程之前
//pc:线程一
//当前线程:main线程
pc.join();
for (int i = 0; i < 10; i++) {
System.out.println("main线程执行" + i);
}
}
}
package AText.多线程.T04_Threadmethod.P8;
public class P8Class extends Thread{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程一执行" + i);
}
}
}
测试结果
线程一执行0
线程一执行1
线程一执行2
线程一执行3
线程一执行4
线程一执行5
线程一执行6
线程一执行7
线程一执行8
线程一执行9
main线程执行0
main线程执行1
main线程执行2
main线程执行3
main线程执行4
main线程执行5
main线程执行6
main线程执行7
main线程执行8
main线程执行9