1、什么是线程?线程是一个程序内部的顺序控制流。
2、线程和进程的区别?
1)每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
2)线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,开销小。
3)多进程:在操作系统中能同时运行多个任务。
4)多线程:在同一个应用程序中有多个顺序流同时执行。
3、线程实现的类:java.lang.Thread
4、实现方法:继承Thread或者实现Runnable,每个线程都是通过某个特定Thread对象所对应的方法run()来完成操作,方法run()成为线程体。通过Thread类得start()方法启动线程。
例子://实现Runnable
/* public class testThread { public static void main(String[] args) { Runner1 r = new Runner1(); Thread t = new Thread(r); t.start(); for(int i=10;i>0;i--){ System.out.println("main--------"+i); } }
} class Runner1 implements Runnable{ public void run() {
for(int i=0;i<10;i++){ System.out.println("Runner1------"+i); } } }*/ //继承Thread public class testThread { public static void main(String[] args) { Runner1 r = new Runner1(); r.start(); for(int i=10;i>0;i--){ System.out.println("main--------"+i); } }
} class Runner1 extends Thread{ public void run() {
for(int i=0;i<10;i++){ System.out.println("Runner1------"+i); } } } 5、线程状态的转换:调用start()方法后,只是进入排队期,并不是立即执行;再分配时间期结束后,再次进入排队期,等待执行,即进入阻塞期。
6、线程控制的方法:
7、线程同步:访问同一个资源的多个线程之间来进行相互协调就是线程同步。
1)synchronized() 用于锁定当前对象,只有执行完,锁打开后,其他线程才有机会执行。称为“互斥锁”,保证共享数据操作的完整性。当某个对象用synchronized()修饰时,表面该对象在任一时刻只能由同一个线程访问。
例子:
public class TestSync implements Runnable{
Timer timer = new Timer();
public static void main(String[] args) { TestSync test = new TestSync(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); }
public void run() {
timer.add(Thread.currentThread().getName()); } }
/*class Timer{ private static int num=0; public void add(String name){ //第一种sysnchronized的使用方法
synchronized (this) {//关键字sysnchronized 锁定当前对象 实现线程同步 num++; try{ Thread.sleep(1); }catch(InterruptedException e){ } System.out.println(name+",你是第"+num+"个timer的线程"); } } }*/ class Timer{ private static int num=0; //第二种使用方法,放在方法声明中,表示整个方法为同步方法。
public synchronized void add(String name){ //synchronized (this) {//关键字sysnchronized 锁定当前对象 实现线程同步 num++; try{ Thread.sleep(1); }catch(InterruptedException e){ } System.out.println(name+",你是第"+num+"个timer的线程"); } //} } |
|