JAVA之多线程

何为多线程

进程:是正在运行的程序

  • 是系统进行资源分配和调用的独立单位
  • 每一个进程都有它自己的内存空间和系统资源

线程:是进程中的单个顺序控制流,是一条执行路径

  • 单线程:一个进程只有一条执行路径
  • 多线程:一个进程又多个执行路径

多线程的实现方式

方式一:继承Thread类,重写run()方法

设置获取线程名
获取设置线程优先级
线程控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package 多线程;

public class MyThread extends Thread {
public MyThread() {

}
public MyThread(String name) {
super(name);
}
public void run() {
for(int i=0;i<100;i++) {
System.out.println(getName()+" "+i);
}
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package 多线程;

public class MyThreadDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

MyThread mt=new MyThread("1");
MyThread mt2=new MyThread("2");
// mt.setName("1");
// mt2.setName("2");
//设置主线程
Thread.currentThread().setName("3");
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
//设置为守护线程,当jvn里面全是守护线程时结束。
mt2.setDaemon(true);
mt.setDaemon(true);
mt2.setPriority(1);
mt.setPriority(1);
mt.start();
// try {
// mt.join();//等待mt这个线程的死亡,其余线程等待这个线程结束
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
mt2.start();
System.out.println(mt.getPriority());//返回此线程的优先级
//最高10,最低1
System.out.println(mt.currentThread().getName());
}

}
方式二:实现Runnable接口
1
2
3
4
5
6
7
8
9
10
11
12
13
package 多线程;

public class MyRunable implements Runnable {

@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<100;i++) {
System.out.println(i);
}
}

}
1
2
3
4
5
6
7
8
9
10
11
12
package 多线程;

public class MyThreadDemo2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunable mr=new MyRunable();
Thread t1=new Thread(mr);
t1.start();
}

}