首页 > 其他 > 详细

线程Thread

时间:2014-01-15 20:15:55      阅读:419      评论:0      收藏:0      [点我收藏+]

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 );
    }
}

  中断线程:

  • Thread.sleep()    //休眠,括号内为毫秒
  • Thread.yield()   //当前线程让出CPU,但还有可能再抢到

  设置线程优先级:

  • setPriority()  //t.setPriority(Thread.MAX_PRIORITY);...
  • getPriority()  //t.getPriority();...

  线程优先级最大是10最小是1,默认是5。优先级大只是抢到CPU的概率大。

PART3:

如果两个线程同时使用一段代码,可能会在抢占的过程中出现重复或遗漏。可以同时生成两个不同的线程,但有时候,比如售票系统,必须用一个线程体。

            synchronized(this){
//....
            }

synchronized()相当于一把同步锁,得到的线程可以把{}里的程序(同步代码块)执行完毕,才释放锁,别的线程才能执行。

线程Thread

原文:http://www.cnblogs.com/larrylawrence/p/3515350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!