13章笔记及代码.docx
文本预览下载声明
什么是线程?可以看成是程序的一次执行过程,牵扯很少的系统资源。线程的开发:线程两种实现方式?1.继承thread类public class MyFirstThread extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubfor(int i=0;i1000;i++){System.out.println(这是我的第1个线程!);}}}应该如何启动该线程,让他开始工作。Main(){ Thread t=new MyFirstThread(); t.start();}多个线程之间的执行时相互独立的。启动一个线程用thread对象的start方法。启动不是马上就执行run方法,要等到cpu分配过来才能执行。如果直接调用thread的run方法,不会启动一个线程,这时候就会把run方法当成一个普通的方法来执行,这个时候多个线程之间就是按照顺序执行。举例:一个打印一串字母,一个打印一串数字,看看两个线程打印情况,让两个线程同时启动。package com.wdp;publicclass Test {publicstaticvoid main(String[] args) {//打印字母的线程Thread t=new PrintLetterThread();Thread t1=new PrintNumberThread();//开启两个线程t.start();t1.start();}}/** * print letter * @authorchidianwei * */class PrintLetterThread extends Thread{@Overridepublicvoid run() {// TODO Auto-generated method stubfor(int i=0;i1000;i++) System.out.println(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);System.out.println();}}/**print number*/class PrintNumberThread extends Thread{@Overridepublicvoid run() {// TODO Auto-generated method stubfor(int i=0;i1000;i++) System.out.println(0000000000000000000000000000000000000000000000);System.out.println();}}2.实现runnable接口/**print number*/class PrintNumberThread implements Runnable{@Overridepublicvoid run() {// TODO Auto-generated method stubfor(int i=0;i1000;i++) System.out.println(0000000000000000000000000000000000000000000000);System.out.println();}}启动一个线程:Runnable t1=new PrintNumberThread();//开启两个线程Thread number=new Thread(t1);number.start();线程的状态,状态之间如何切换?初始状态--start---可运行状态(就绪状态)------分配cpu----运行状态(如果时间片到期可能回到可运行状态)--------run--------结束状态线程阻塞两种方式:1.如果正在运行的线程调用sleep方法,会进入一个阻塞状态等到sleep时间已到,重新进入可运行状态2.第二种方法用thread的join阻塞注意:用sleep控制程序阻塞是不准确的,使用join方法可以使程序的控制变得准确。思考题?有几个线程?打印结果是什么?可否在main方法里面直接调用run方法,这和用start方法有何区别?public class Test {public static void main(String[] args) {// TODO Auto-generated method stubTestThread tt = new TestThread();tt.run();System.out.println(Thread.currentThread().getName());System.out.println(Printed by main thread);}}class TestThr
显示全部