如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
软件工程师培训系列教材COREJAVACOREJAVA第13章:线程目录z线程的概念z线程的开发z线程的状态z线程的同步zwait与notify线程的概念z线程的概念在一个程序中同时运行的多个独立流程,每一个独立的流程就是一个线程z线程的3要素CPUCodeData线程的概念z线程并发z主线程线程的开发z继承Thread类与实现Runnable接口2种方式z继承Thread类开发线程用户定义一个类继承Thread类覆盖run方法运行线程线程的开发线程的开发线程的开发z思考程序的输出结果固定吗?程序中存在几个线程?执行的先后顺序可不可以直接在main方法中直接调用run()线程的开发zRunnable接口开发线程用户开发一个类实现Runnable接口实现run()运行线程9Runnabletarget=newMyRunnable2();9Threadt2=newThread(target);线程的开发线程的开发两种建立线程方式的比较z继承Thread是面向对象的编程方式z实现Runnable接口解决了单一继承限制线程的状态zThreada=newMyThread();a.start();初始状态可运行状态运行状态终结状态线程的状态sleep与阻塞z阻塞状态sleep方法zsleep方法publicstaticvoidsleep(longmillis)throwsInterruptedExceptionsleep方法sleep方法z利用sleep方法对线程的控制是非常不精确的zjoinjoin方法也会导致线程阻塞9特点:如果当前线程中调用了另外一个线程的join方法,当前线程会立即阻塞,直到另外一个线程运行完成join方法join方法join方法join方法zjoin方法的问题如果2个线程彼此调用对方的join方法,会导致程序无法进行。解决办法9publicfinalvoidjoin(longmillis)throwsInterruptedException线程同步z应用数组实现一个栈线程同步线程同步线程同步z代码实现没有问题z改动MyStack中的push方法z改写代码提供2个线程一个存值一个取值线程同步线程同步线程同步z改动过的代码线程同步z改动过的代码线程同步z产生数据不一致的原因多个线程并发访问了同一个对象,如果破坏了不可分割的操作,从而就会造成数据不一致z临界资源z原子操作z被多线程并发访问时如果一个对象有可能出现数据不一致的问题,那么这个对象称为线程不安全的对象线程同步z如何解决多线程并发访问的问题zsynchronized(object){代码块}线程同步线程同步线程同步zsynchronized(this)线程同步zsynchronized修饰方法线程同步zsynchronized注意synchronized(obj1){代码块1;}synchronized(obj1){代码块2;}synchronized(obj2){代码块3;}线程同步z死锁synchronized(a){...//1synchronized(b){}}synchronized(b){...//2synchronized(a){}}wait与notifyz用于解决死锁synchronized(a){...//1a.wait();synchronized(b){}}wait与notifywait与notifyz生产者消费者问题同时2个线程操作一个栈,一个线程负责往栈中添加数据,一个线程负责从栈中删除数据生产者消费者问题生产者消费者问题生产者消费者问题生产者消费者问题生产者消费者问题生产者消费者问题