多线程基础:
进程与线程----
什么是进程(进程是操作系统中的运行的任务,包含一个或多个执行单元是线程,一个进程至少有一个线程)
什么是线程(进程的顺序执行流,线程是高并发性,多线程有多个执行部分可以同时执行)
并发原理----
使用时间片进行控制线程并发
线程状态----
线程操作API:
Thread.currentThread方法(获取当前线程名称----[线程名称,线程等级,线程守护方法名])
获取线程信息(
long getld():获取该线程的标识符
String getName():返回该线程的名称
int getPrority():返回线程的优先级1-10
Thread.state getState():获取线程的状态
Boolean isAlive():测试线程是否属于活动状态
)
线程的优先级
Thread.MIN_PRIORITY
Thread.MAX_PRIORITY
Thread.NORM_PRIORITY
package cn.edu.sqxy.day16;
public class TestGetNameAndGetId {
public static void main(String[] args) {
Thread t1 = new Thread();
t1.setPriority(Thread.MIN_PRIORITY);
System.out.println("t1:"+t1.getName());
System.out.println("t1:"+t1.getId());
System.out.println("t1等级:"+t1.getPriority());
Thread t2 = new Thread();
t2.setPriority(Thread.NORM_PRIORITY);
System.out.println("t2:"+t2.getName());
System.out.println("t2:"+t2.getId());
System.out.println("t2等级:"+t2.getPriority());
Thread t3 = new Thread("ydd的线程");
t3.setPriority(Thread.MAX_PRIORITY);
System.out.println("t3:"+t3.getName());
System.out.println("t3:"+t3.getId());
System.out.println("t3等级:"+t3.getPriority());
}
}
守护线程:
void setDeaemon(blloean)设置为守护线程
GC(java中垃圾回收机制)
Gc是运行的一个线程
sleep方法:睡眠阻塞状态
package cn.edu.sqxy.day16;
//测试守护线程
public class TestDaemon {
public static void main(String[] args) {
Thread d = new Thread(){
@Override
public void run(){
while(true){
System.out.println("后台线程");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
// 设置为守护线程
d.setDaemon(true);
// 启动
d.start();
// main阻塞5秒
try{
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main线程结束啦");
}
}
public class TestSleep {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Mypanel panel = new Mypanel();
frame.add(panel);
Thread t = new Thread(panel);
t.start();
}
}
class Mypanel extends JPanel implements Runnable{
@Override
public void run() {
// 创建对象
// JPanel panel = new JPanel();
// 设置大小
this.setSize(300,300);
// 设置标识符
int i = 0;
// 死循环
while (true){
i=i==0?1:0;
if (i == 0){
this.setBackground(Color.green);
}else {
this.setBackground(Color.white);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
yield方法:出让CPU时间片
join:void joint():等待当前线程结束
package cn.edu.sqxy.day16;
public class TestJoin {
public static void main(String[] args) {
Thread t1 = new Thread(){
@Override
public void run(){
for (int i = 0 ;i<10;i++){
System.out.println("t1:已下载图片:"+i*10+"%");
}
System.out.println("t1:下载完成");
}
};
Thread t2 = new Thread(){
@Override
public void run(){
System.out.println("t2:等待图片下载完成");
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t2:显示图片");
}
};
t1.start();
t2.start();
}
}