PART1:在Windows里启动一个程序就是启动一个线程。不同线程之间快速切换,所以感觉是很多线程在同时执行。
Test.java
1
2
3
4
5
6
7
8
9
10
11 |
class
Test { public
static
void
main(String args[]) { FirstThread ft = new
FirstThread(); //ft就是线程对象 ft.start(); //启动线程 (start方法从Thread中extends来),<strong>注意,这里如果写成ft.run();那么就会先执行ft,再执行下面的代码。</strong> for ( int
i = 0
; i < 100
; i++) //这是主线程 和ft线程抢cpu System.out.println( "main-->" + i ); } } |
FirstThread.java
1
2
3
4
5
6
7
8 |
class
FirstThread extends
Thread //线程类 { public
void
run() //为什么必须是run?因为:这里是覆写了run方法 { for ( int
i = 0
; i < 100
; i ++ ) System.out.println( "FirstThread"
+ i ); } } |
执行Test.java,每次打印的结果都不一样。因为两个线程不停抢CPU。
PART2: java的单继承性可通过implements若干个接口的方式,弥补可多继承的缺陷。所以倾向于用下面的方法:
Test.java
1
2
3
4
5
6
7 |
class
Test { public
static
void
main(String args[]) RunnableImpl ri = new
RunnableImpl(); //生成RunnableImpl接口对象 Thread t = new
Thread(ri); //生成Thread对象,把ri作为构造函数的参数传给Thread对象 t.start(); } |
Runnalbleimpl.java
1
2
3
4
5
6
7
8 |
class
RunnableImpl implements
Runnable { public
void
run() //run()是覆写的方法 { for ( int
i = 0
; i < 100
; i ++ ) System.out.println( "Runnable-->"
+ i ); } } |
中断线程:
设置线程优先级:
线程优先级最大是10最小是1,默认是5。优先级大只是抢到CPU的概率大。
PART3:
如果两个线程同时使用一段代码,可能会在抢占的过程中出现重复或遗漏。可以同时生成两个不同的线程,但有时候,比如售票系统,必须用一个线程体。
synchronized(this){ //.... }
synchronized()相当于一把同步锁,得到的线程可以把{}里的程序(同步代码块)执行完毕,才释放锁,别的线程才能执行。
原文:http://www.cnblogs.com/larrylawrence/p/3515350.html