关于Java线程我想说的话----0002
接着我上一篇线程讲解的文章,现在先讲一讲线程的常用方法;
1.start(),线程的启动方法,也就是把线程加入就绪队列,等待分配cpu;
2.run(),这是线程运行时所运行的代码块;
3.wait(),阻塞状态的等待状态,可能是等待资源等,此是线程会让出cpu,如果此线程有锁 还会释放锁,通常在run()函数里;
4.sleep(time),睡眠状态,睡眠时间以毫秒计,如sleep(3000),就是线程推迟运行3秒; 通常在run()函数里;
5.yield(),任务已完成,暗示调度机制给其他线程分配cpu(暗示不一定管用);
6.interrupt(),中断线程,用法,thread_name.interrupt(),线程发出了中断,但是线程不一定退出.run()函数里有wait(),sleep(),join()等都要catch这个中断即catch interruptException,如下代码
Class ThreadInterrupt extends Thread
{
public void run()
{ try{
sleep(3000);
}catch(InterruptedException e)
{
System.out.println(e.getMessage);
}
}
7.join(),有插队的意思,如在主函数main()函数里thread_name.join();那么主函数就要thread_name运行完后才能运行,主函数也是个线程,所有你要一个线程先于另一个线程运行的话,在另一个线程里加入一个线程的join(),如我要在b线程先运行于a,那么a的run()里面应该写b.join();这样就行,通常这种方法是a的运行需要b运行后的结果;
二 .线程的优先级:
线程的优先级可分为1到10等级,默认等级为5;线程的子线程和父线程有同样的优先级,比如main()线程和其他线程;线程等级用方法setPriority(int x);线程等级越高越有机会分到cpu;
三.多线程的编程方式
有一些细节应该知道,
1.在任何时间点实际上只有一个线程在运行,就像大脑一样啊,不可能同时做这个
又做那个的;
2.原语操作是不能打断的;原语就是c=a+b;这种语句是不能打断的;这需要自己体会
3.线程并发是多个线程同时处理不同的操作,注意同时二字,这是指宏观上的;
多线程编程可分为不相关线程,相关但是不同步,同步线程,交互式线程;
不相关线程:定义线程之间没有关系,唯一的关系就是cpu是一样的;
相关但不同步:有关系但是相互独立,如收银台,多个收银台收钱;
同步线程:为什么要同步呢,因为不同步可能线程之间会出现错误;
所以同步是为了协调线程之间的制约关系的;主要是针对共享资源的,在同一时间多个线程都想使用的同一资源;主要有生产者消费者问题;即一些线程负责生产,另一些负责取,书上讲的太复杂了,主要是当一个线程取得时候另一个不能生产,
因为加入生产者已经生产了5个产品,消费者要取一个产品然后数量减一;加入两个同一时刻时线程同时运行,加入生产者先生产了一个产品,然后数量加一,为6了,消费者去了一个减一为5了;但是另一种是消费者先去呢数量为4,然后生产者生产了一个又为5了;所有就产生了问题了,你永远不知道数量是多少;所有同步线程就是在消费者
访问共享资源的时候,消费者不能访问资源,就是这个道理;同步线程不难,但是自己要思考才能理解透彻;
--------------------------同步线程还没讲完,下篇继续;