线程:每一个任务称为一个线程,线程不能独立的存在,它必须是进程的一部分
单线程:般常见的Java应用程序都是单线程的,比如运行helloworld的程序时,会启动jvm进程,然后运行主方法产生线程,主方法也被称为主线程。
多线程:同时运行一个以上线程的程序称为多线程程序,多线程能满足程序员编写高效率的程序来达到充分利用CPU的目的。
单线程代码例子:
公开课SingleThread { 公共静态void main (String [] args) { 线程的线程=Thread.currentThread ();//获取当前运行的线程对象 thread.setName(“单线程”);//线程重命名 System.out.println (thread.getName() +”正在运行”); (int i=0; i<10;我+ +){ System.out.println(“线程正在休眠:”+ i); 尝试{ thread . sleep (1000);//线程休眠,延迟一秒 }捕捉(InterruptedException e) {//TODO自动生成的catch块 e.printStackTrace (); System.out.println(“线程出错”); } } } }
多线程代码例子:
注意:多线程有两种实现方式,一种是继承线程类,另一种是实现运行的接口。
<强>继承线程类实现多线程强>
公开课TestThread { 公共静态void main (String [] args) { 线程t1=new ExtendThread (t1, 1000);//使用上转对象创建线程,并构造线程名字和线程休眠时间 线程t2=new ExtendThread (t2, 2000); 线程t3=new ExtendThread (t3, 3000); t1.start ();//启动线程并调用运行方法 t2.start (); t3.start (); } } 类ExtendThread扩展线程{//继承线程的类 字符串名称; int时间; 公共ExtendThread(字符串名称,int){//构造线程名字和休眠时间 this.name=名称; this.time=时间; } 公共空间run(){//重写线程类的运行方法 尝试{ 睡眠(时间);//所有线程加入休眠 } 抓住(InterruptedExceptione) { e.printStackTrace (); System.out.println(“线程中断异常”); } System.out.println(“名称为:“+名字+”,线程休眠:”+时间+“毫秒”); } }
<>强实现运行的接口的多线程强>
公开课RunnableThread { 公共静态void main (String [] args) { 可运行r1=new ImplRunnable (r1, 1000);//运行的接口必须依托线程类才能创建线程 线程t1=新线程(r1);//可运行并不能调用开始()方法,因为不是线程,所以要用线程类加入线程 可运行r2=new ImplRunnable (r2, 2000); 线程t2=新线程(r2); 可运行r3=new ImplRunnable (r3, 3000); 线程t3=新线程(r3); t1.start ();//启动线程并调用运行方法 t2.start (); t3.start (); } } 类ImplRunnable实现Runnable{//继承Runnable接口的类 字符串名称; int时间; 公共ImplRunnable(字符串名称,int){//构造线程名字和休眠时间 this.name=名称; 这一点。时间=时间; } @Override 公共空间run(){//实现可运行的运行方法 尝试{ thread . sleep ();//所有线程加入休眠 } 抓住(InterruptedException e) { e.printStackTrace (); System.out.println(“线程中断异常”); } System.out.println(“名称为:“+名字+”,线程休眠:”+时间+“毫秒”); } }
说明:线程类实际上也是实现了Runnable接口的类。
实现运行的接口比继承线程类所具有的优势