1. 线程实现两种方式
- 继承Thread类;重写run接口
继承Thread类
class MyFirstThread extends Thread{
private int i=0;
@Override
public void run() {
// TODO Auto-generated method stub
for(i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
实现Runnable接口
class MyFirstRunnable implements Runnable{
private int i=0;
@Override
public void run() {
// TODO Auto-generated method stub
for(i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" "+ i);
}
}}
1.1 Thread 和Runnable两种实现方式
继承Thread接口或者实现Runnable两种方式
具体实现的时候
- Thread :
Thread firstThread= new MyFirstThread();
firstThread.start();
如使用.run,run方法调用并不会创建新的线程,而是在主线程中直接运行run方法,
- Runnable:
Runnable second= new MyFirstRunnable();
Thread thread=new Thread(second);
thread.start();
注意:类的单继承和多实现在很大程度上决定了线程的实现方法
2. 在程序开发中只要是多线程肯定永远以实现Runnable接口为主。
实现Runnable接口相比继承Thread类有如下好处:
- 避免继承的局限,一个类可以继承多个接口。
- 适合于资源的共享。
3. synchronzied
- 概括就是:线程同步。可用来修改对象中的方法,将对象加锁。相当于不管哪一个线程A每次运行到这个方法,都要检查有没有其它正在用这个方法的线程B(或C D等),有则要等正在使用这个方法的线程运行完这个方法后再运行此线程A,没有则直接运行。