多线程
同时对多项任务进行控制。
- 继承Thread类
- 实现Runnable接口,可以实现资源共享
方法一
public class Music extends Thread{
//Alt+S 实现run方法
@Override
public void run() {
// TODO 自动生成的方法存根
for (int i = 0; i<1000; i++){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("听音乐");
}
}
}
public class Eat extends Thread{
@Override
public void run() {
// TODO 自动生成的方法存根
for (int i = 0; i<1000; i++){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("吃饭");
}
}
}
/**
* 利用多线程实现一边吃饭一边听歌
* @param args
*/
public class Demo1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//music();
//eat();
Music musicThread =new Music();//new线程
Eat eatThread =new Eat();
musicThread.start();
eatThread.start();
}
}
方法二
public class Thread1 extends Thread{
private int baozi = 1;
private String threadName;
//给线程取名字
public Thread1(String threadName) {
super();
this.threadName = threadName;
}
@Override
public void run() {
// TODO 自动生成的方法存根
while (baozi<= 10) {
System.out.println(threadName + "吃第"+baozi+"个包子" );
baozi++;
}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1("张三线程");//new线程
Thread1 t2 = new Thread1("李四线程");
t1.start();
t2.start();
}
}
张三线程吃第1个包子
李四线程吃第1个包子
张三线程吃第2个包子
李四线程吃第2个包子
张三线程吃第3个包子
李四线程吃第3个包子
张三线程吃第4个包子
李四线程吃第4个包子
张三线程吃第5个包子
李四线程吃第5个包子
张三线程吃第6个包子
李四线程吃第6个包子
张三线程吃第7个包子
李四线程吃第7个包子
张三线程吃第8个包子
李四线程吃第8个包子
张三线程吃第9个包子
李四线程吃第9个包子
张三线程吃第10个包子
李四线程吃第10个包子
方法三
//Runnable接口
public class Thread2 implements Runnable{
private int baozi = 1;
private String threadName;
public Thread2(String threadName) {
super();
this.threadName = threadName;
}
public void run() {
// TODO 自动生成的方法存根
while (baozi<= 10) {
System.out.println(threadName + "吃第"+baozi+"个包子" );
baozi++;
}
}
public static void main(String[] args) {
Thread2 t1 = new Thread2("超级张三线程");//new线程
//三个线程
Thread t11 = new Thread(t1);
Thread t12 = new Thread(t1);
Thread t13 = new Thread(t1);
t11.start();
t12.start();
t13.start();
}
超级张三线程吃第1个包子
超级张三线程吃第1个包子
超级张三线程吃第1个包子
超级张三线程吃第3个包子
超级张三线程吃第2个包子
超级张三线程吃第5个包子
超级张三线程吃第4个包子
超级张三线程吃第7个包子
超级张三线程吃第6个包子
超级张三线程吃第9个包子
超级张三线程吃第8个包子
超级张三线程吃第10个包子
使用synchronized:线程同步,同步后,多个线程无法同时进入run方法
//synchronized:线程同步
public synchronized void run()……
超级张三线程吃第1个包子
超级张三线程吃第2个包子
超级张三线程吃第3个包子
超级张三线程吃第4个包子
超级张三线程吃第5个包子
超级张三线程吃第6个包子
超级张三线程吃第7个包子
超级张三线程吃第8个包子
超级张三线程吃第9个包子
超级张三线程吃第10个包子