-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、继承Thread
1)继承Thread类
(1)定义类继承Thread类
(2)重写Thread类的run()方法
(3)创建该类对象
(4)调用start()方法即可开启新线程, 新线程会自动执行run()方法
2)实现Runnable
(1)定义类实现Runnable接口
(2)实现Runnable接口的run()方法
(3)创建自定义Runnable对象
(4)创建Thread对象, 将Runnable对象传入Thread类的构造函数
(5)调用start()方法即可开启新线程, 新线程会自动执行Runnable的run()方法
二、线程常用方法
1)currentThread
静态方法, 获取当前的线程对象
2)getName, setName
获取和设置线程的名字
3)sleep
静态方法, 控制当前线程休眠指定毫秒
4)setDaemon
设置指定线程为守护线程, 守护线程不会单独运行
5)join
当前线程暂停, 等待指定线程执行完毕后再继续
三、同步
1)什么是同步
在多线程并发访问同一资源时, 有可能出现线程安全问题,为了解决这种问题, 我们就可以使用同步技术将多个线程访问资源的代码进行同步。
2)同步代码块
(1)将需要同步的代码放在 synchronized(){} 代码块中, 在小括号中指定锁对象
(2)多段使用相同锁的同步代码块, 同一时间只能执行一个, 必须等待一个执行结束后其他的才能继续执行
3)同步方法
(1)如果整个方法内的代码都需要同步, 可以在方法前加上synchronized修饰
(2)只有在同一个类中的几个方法可以使用同步方法的形式进行同步, 如果不同类中的几个方法想要同步, 必须使用同步代码块
(3)因为同步方法默认使用this作为锁对象
4)死锁
多线程并发执行时, 如果多段同步代码嵌套使用, 有可能互相冲突产生死锁, 导致程序阻塞.在编程的过程中尽量不要将同步代码嵌套使用, 避免产生死锁。
四、通信
1)什么是通信
在多线程并发执行的时候, 可以使用wait()和notify()方法在多个线程间互相通信
2)怎么使用
(1)通信的代码必须写在同步代码中, 必须使用锁对象来调用wait()和notify()
(2)wait()方法可以控制当前线程等待, 直到其他线程调用notify()或者notifyAll()方法才被唤醒
练习:
package Package;
public class ThreadDemo1 {
public static void main(String[] args) {
thread1 a1=new thread1("A");
thread1 a2=new thread1("B");
a1.start();
a2.start();
}
public static class thread1 extends Thread{
private String name;
public thread1 (String name){
this.name=name;
}
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(name+":"+i);
}
super.run();
}
}
}
运行效果: