【黑马程序员】java多线程学习总结

------ <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---

1.线程就是一个串行执行的程序流,多线程就是指一个程序同时又多个线程在执行,彼此平行。

2.一个java程序至少有2个线程,一个main(),一个垃圾回收器。获得当前线程对象的应用:this.currentThread()

3.线程的运行状态:
新建:主线程调用了start()但还没轮到
运行:正在执行
冻结:sleep(time),wait()—notify()唤醒; 
线程释放了执行权,同时释放执行资格;
临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权;

消亡:stop() run方法结束


4.创建线程的方法:
(1)继承Thread类,实现run()方法,run方法中的代码就是
子线程的代码。在主线程中,
 
MyThread th=new MyThread();
  th.start();    //启动子线程

(2)实现Runnable接口,同样是要实现run()方法
在主线程中:
Thread th2=new Thread(new MyRunnable());
 th2.star();

(3)Executors类创建线程或线程池

a.定时器
<pre name="code" class="java">Executors.newScheduledThreadPoo(1).scheduleAtFixedRate(
	new Runnable() {
	 @Override
       public void run() {
	//子线程代码
 	}
},int initialDelay,int period,TimeUnit);
//initialDelay:第一次执行的延迟时间
//period:执行周期
//TimeUnit:时间单位,枚举


 b。单个子线程 

Executors.newSingleThreadExecutor().execute(
		new Runnable(){
		    @Override
		    public void run() {
     	//子线程代码
	}
}		      

5.多线程安全
(1)有些语句块在执行的时候不能被中断,否则会造出错误,
这称为原子性。当多条线程同时访问一个对象的数据时,
应该让一个线程访问完,才能让另一线程访问。
这可以通过synchronized语句
synchronized(Object){
   //需要被同步的代码
}
对象如同锁,只有获得锁的对象才能访问相应的代码
(2)同步函数public synchronized void function(){}
6.当2个线程相互等待 对方已被锁定的资源,就会发生死锁的

问题。避免死锁的一个通用的经验法则是:当几个线程都要访问共享资源A、B、C时,保证使每个线程都按照同样的顺序去访问它们,比如都先访问A,在访问B和C。


7.线程的调度
(1)调整线程的优先级th.setPriority(int),共有10级。
(2)某线程中调用sleep()或sleep(int time)进入睡眠状态,并把执行权让给其他的线程。
(3)线程让步th.yield()

(4)一个线程调用另一个线程的join(),一直等到另一线程执行完它才恢复执行。 


8.线程间通信。Object类有wait(),notify(),notifyAll()这3函数,它是所有类的基类,所以所有类都有着3个函数。
这3个函数用在加锁的代码块中。
(1)线程执行wait()时,会释放对象的锁,并被jvm放入到该对象的等待池中,等待其他对象将他唤醒。
(2)当代码结束的时候,应该调用notifyAll()唤醒其他因为等待锁而处于阻塞状态的线程。

(3)notify()随机唤醒一个对象等待池中的线程,用的很少一般用notifyAll()

------ <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值