误区:
一个走完再走另一个
正确:
多个线程同时进行
进程:进行中的程序
线程:进程中的一个执行单元
在Java中创建线程的两种方式
过程:
t1.start();//启动线程
线程就绪
CPU分配资源,运行(执行run())
1.继承java.lang.Thread类:
Java提供了java.lang.Thread类支持多线程编程
定义MyThread类继承Thread类
重写run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
public class MyThread extends Thread {
private int i = 0;
public void run() { // 重写run()方法
for (;;) {
System.out.println(i + "线程id:" + this.getId());
i++;
try {
Thread.sleep(0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) { //1
MyThread t1 = new MyThread();//创建线程对象
MyThread t2 = new MyThread();
t1.start();//启动线程
t2.start();
}
public static void main(String[] args) { //2
MyThread t1 = new MyThread();//创建线程对象
Thread h1 = new Thread(t1,"自定义线程Name1");
Thread h2 = new Thread(t1,"自定义线程Name2");
h1.start();//启动线程
h2.start();
}
2.实现java.lang.Runnable接口
定义MyRunnable类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
解决并发: 同步 synchronized 1.同步代码 2.同步方法
public class MyRunnable implements Runnable {
private int i = 0;
public void run() {
for (;;) {
synchronized (this) { // 同步代码
// System.out.println(i+"线程id:"+Thread.currentThread().getId());
txt();
i++;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}// 同步方法
public synchronized void txt() {
System.out.println(i + "线程id:" + Thread.currentThread().getId());
}
线程的5个状态
创建线程 准备就绪 运行状态 阻塞状态 死亡状态
线程调度常用
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态