---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
多线程:
进程:一个正在执行的程序,一个进程中至少有一个线程,每一个进程执行都有个执行顺序,这顺序是一个执行路径(控制单元)
线程:进程中的一个独立控制单元,线程控制着进程的执行,而对线程这类事物的描述,在java里 是 Thread类
创建线程的方式,线程都有自己默认的名称,Thread-编号
1,继承thread类,复写里面的run方法,调用start方法
2,定义类实现runnable接口,
复写runnable接口中的run方法,
通过thread类建立线程对象
将runnable接口的子类对象作为实际参数传递给thread的构造函数
调用thread类的start方法开启线程
并调用runnable接口子类的run方法
实现方式:避免单继承的局限性,存放在接口的子类的run方法中.
继承thread:线程代码存放在thread子类的run方法中
常见方法:
cunrrentThread():获取当前线程对象
getName():获取线程名称
setName()或构造函数 :设置线程名称
同步:synchronized(对象){}
线程间的通讯就是多个线程操作同一资源(视频:生产者与消费者)
可以作为修饰符,修饰函数,同步函数使用的锁是this,如果同步函数被静态,修饰后使用的锁是该方法所在类的字节码文件对象.类名.class(类型:Class)
当多条语句在操作同一个线程共享数据时,一个线程对多条语句执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据错误
同步的前提:必须要有两个以上的线程,必须是多个线程使用同一个锁,必须保证同步中只有一个线程在运行
解决了多线程的安全问题,但消耗资源
死锁:同步嵌套,A锁找B锁,B锁找A锁,无限循环
方法:配合synchronized()使用
wait():线程等待
notify():唤醒线程
notifyAll():唤醒全部线程
1,这些方法存在与同步中。
2,使用这些方法时必须要标识所属的同步的锁。
3,锁可以是任意对象,所以任意对象调用的方法一定定义Object类中。
wait(),sleep()的区别是:
wait():释放cpu执行权,释放锁。
sleep():释放cpu执行权,不释放锁。
接口 Condition:
当A线程执行到了B线程的.join()时,A会等待,等B线程都执行完,A才会执行,可以用来临时加入线程执行
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------