Thread线程

Thread线程

Thread简介

        Thread简介线程是程序中的执行线程。

        Java 虚拟机允许应用程序并发地运行多个执行线程。                    

        线程的优先级:高优先级的线程优先于低优先级的线程,但多线程的执行本身就是多线程交换执行,并非同时执行,执行的优先级只是它执行的概率。例如:A的优先级为60%,B为40%。A、B第一次抢占CPU的时候,A先抢到,执行完之后又要重新抢占CPU,但B也可能会抢到。只是概率低一点,但总会有B执行的机会。线程的执行是无规律的,并且无法控制。

建立线的线程来执行是很简单的,
Thread t=new Thread();
t.start();
这样就建立了一个新线程。但是这样有一个问题:该线程并没有执行任何程序,故事就这么结束了。所以我们还少了一个关键因素——线程的任务。

        

一个隐藏的tip:每个程序的main()方法就是一个线程,新的线程启动期间main线程会暂时停止执行,然后再再线程会原来的主线程间切换到完成。

        Thread的几个重要的方法:
                                        void join();等待该线程终止。
                                        void start();使该线程开始执行;
                                        static void sleep(); 使该线程开始休眠(暂停执行);
Thread对象不可以重复使用,线程的run方法完成之后,线程就不能重新启动,Thread对象可能还呆在腿上,还能接受某些方法的调用,但已经失去了线程的执行性,只剩下对象本身。
2. 线程的任务——Runnable
//建立线程的任务
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的钥匙,两个线程就一直相互等着,然后程序就死了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值