多线程总结:

什么是进程?  ( 理解)
  如果一次只能运行一个程序,那程序和程序运行是一个概念。因为它们是一一对应的。
 

什么是线城(必须掌握)
现在是一个程序被多个程序加载,那现在程序和程序运行就不是一个概念了。这就叫线城
或者说 : 一个程序从上往下按顺序执行,现在情况是,上面的代码没有执行完,而下面的代码抢到了CPU执行权,也运行了.  这就是多线程

为什么需要线程?(理解)
  今天进程太麻烦了。进程太浪费资源,进程和进程之间的切换浪费时间,所以创造了线程


 
如果不理解进程,就不知道进程的缺点,不知道进程的缺点,就不知道什么是线城,他们是连在一起的。
进程就是一个程序在运行

线程的控制:
  优先级控制
  线城的休眠 ,让步,挂起和恢复
  线城的串行话
  现成的生命周期控制

线程同步:
  线城的死锁
  例子:
     买票
     生产和消费问题

多道程序的意思是:除了计算机操作系统之外,有多个用户程序,这些程序同时运行。
多道程序的特点:
   1:间断性     如果a和b 2个程序同时运行,a还没有运行完,b就把执行权夺取然后运行
   2:失去封闭性
   3:不可再现性  重复执行一个程序,得到的结果总是不一样的

进程:程序一旦被运行,就叫进程。
进程是一个动态的实体,它有自己的生命周期,他因为创建而存在,因为调用而运行,因等待资源或事件而处理等待状态
     因为完成任务而被撤消。

线程:是一个程序里有很多不同线路的执行。
多线程编程简单,效率高(能直接共享数据和资源,多进程不能)适合于开发web服务,聊天服务等

多线程:
      第一个方法:继承thread类,重写父类的run方法 ,构造一个A对象,调用A对象的start方法 {start方法是从thread继承过来的}
注意:执行aa.start开启一个线程,并不代表他一定会执行run方法,只是抢到了cpu的执行资格,但是由于抢占cpu执行资格有很多线程,CPU不一定会执行aa所对应的线程。
      第二个方法:如果一个实例类想要开启线程,可以实现Runnable接口。 类中必须定义一个run的无参数方法。
                 用多态的方法 : A a = new A();  //创建A 类对象a
                                Thread  tt = new Thread(a); //利用a构造一个Thread对象tt
                                tt.start();  //调用tt中的start()方法
线程2种方式的区别:
  继承Thread类,需要建立好多个实例对象.  而且成员都要加static 让对象共享一个数据  这个有点麻烦.
  实现Runnable接口,只需要建立一个Thread对象,可以构造出多个线程,这些线程共享一个数据 最好用这个


Thread.setName(String name)
   |--设置当前线程的名字
Thread.currentThread()
   |--返回对当前正在执行的线程对象的引用
Thread.getName();
   |--返回当前线程的名字


 线程的控制:
  1:优先级控制  
     |--线程优先级用数字来表示,范围从1到10
     |--主线程的缺省优先级是5,子线程的优先级默认与其父线程相同。
  2:线程的休眠和让步
     |--就是让正在进行中的线程暂停执行,进入阻塞状态,带经过指定的延迟时间规定后,醒来之后转入到就绪状态。
     |--Thread类提供相应的方法:
        public static void sleep(long millis)
  public static void sleep(long millis,int manos)
        sleep()方法会抛出 InterruptedException异常,我们必须对其进行捕捉

     |--线程的让步,也就是让出CPU,给其他线程执行的机会。
        让运行中的线程主动放弃当前获得的CPU处理机会,但不是让该线程阻塞,而是让它转入就绪状态。
        方法: public static void yield()
  3:挂起和恢复
     |--线程挂起:停止当前正在运行中的线程,使之进入阻塞状态,并不会自动恢复运行.
     |--线程恢复:使一个已挂起的线程恢复运行.
        Thread类提供的相关方法:
        public final void suspend();  //暂停
        public final void resume();   //重新取得
  4:线程的串行话
     |--在多个线程程序中,如果在一个线程运行的过程中要用到另一个线程运行结果,则可进行线程的串型化处理
        这个方法比较好玩,想要在多线程中不受其他线程的阻塞,调用Thread.join()方法,在抛出异常即可。它没有执行完,后面的代码将不在运行.
        方法:public final void join()throws        InterruptedException
  5:生命周期控制
     |--如何结束一个线程

线程的同步:
     |--synchronized 同步
     |-- wait 等一等/  notify 通知 / notifyall 如果你们没有


final 修饰的方法,表示不能被重写
run方法不可以抛出异常:原因 重写方法抛出异常的范围不能大于被重写方法排除的异常范围
      
 

Synchronized同步关键字:
   1:可以修饰一个方法
     public void Synchronized run()   表示这个方法同步
   2:可以修饰一个方法内部的某个代码块
     class A
     {
	 private int  age=10;
        public void run()
        {
		String i =new String ("哈哈");
		while(true)
		{
			Synchronized(i) //同步代码块
			{
				if()........
			}
		{
	 }
     }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值