Thread线程
Thread简介
Thread简介线程是程序中的执行线程。
Java 虚拟机允许应用程序并发地运行多个执行线程。
线程的优先级:高优先级的线程优先于低优先级的线程,但多线程的执行本身就是多线程交换执行,并非同时执行,执行的优先级只是它执行的概率。例如:A的优先级为60%,B为40%。A、B第一次抢占CPU的时候,A先抢到,执行完之后又要重新抢占CPU,但B也可能会抢到。只是概率低一点,但总会有B执行的机会。线程的执行是无规律的,并且无法控制。
Thread t=new Thread();
t.start();
一个隐藏的tip:每个程序的main()方法就是一个线程,新的线程启动期间main线程会暂时停止执行,然后再再线程会原来的主线程间切换到完成。
//建立线程的任务
Runnable threadJob=new Runnable;
//建立Thread对象并安排任务
Thread myThread=new Thread(threadJob);
//启动Thread,还没调用Thread的start方法之前什么都不会发生
myThread.start();
会被新线程执行的代码放在run()方法中。
3.线程的缺点——并发性
线程会产生并发性的问题,比如:A线程和B线程有一个共同银行账户,A去银行查了余额还有100元,然后去睡了,B也来银行查询余额,看见还有100元,也去睡了。然后A醒来去取了50元,B醒来也去取了50元,A和B原本都以为账户里还会剩下50元余额,结果现在账户里一分不剩了。所以他们就约好要对账户上一把锁。
4.锁——Synchronized
A和B约定好,上一把锁,但锁只跟账户交易有关,锁跟平时是打开的,钥匙也在旁边,但当任何一个人想要对账户进行操作时,都要把账户锁上并且带走钥匙,操作完之后就把锁解开并且放回钥匙。你以为这样就没有问题了吗?
使用Synchronized关键词修饰方法就能使它每次只能被单一的线程存取(同步化)。
5.死锁
只要有两个线程和两个对象就可以引起死锁,比如,有A、B两个线程,a,b两个对象。A先进入a对象设定同步化的方法,A睡着。B进入b象设定同步化的方法,B接下来尝试进入a方法,但A在,所以B只能等一等,A醒来,尝试进入B执行的方法,也只能等。这样A在等B的钥匙,B在等A的钥匙,两个线程就一直相互等着,然后程序就死了。