线程
什么叫做进程
进程是程序在某个数据集上的执行
进程是个动态的实体
线程是一个程序里的不同执行的路径
package testthread; class A extends Thread{ public void run(){ while(true){ System.out.printf("AAAA!\n"); } } } public class Testthread { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here A aa = new A(); aa.start();//aa.strat会自动调用run方法 开辟一个新的线程 while(true){ System.out.printf("BBBB!\n"); } } }
多线程的优势:
-
多线程编程简单,效率高(能直接共享数据和资源,多进程不能)
-
适合于开发服务程序(web服务,聊天服务等)
创建一个线程的第一种方法
-
创建一个继承Thread的类(假定类名为A),并重写Thread中的run方法
-
构造一个A类对象,假定对象名为aa
-
调用aa的start方法【start方法是从thread继承过来的】
注意问题
-
Thread中start()方法的功能就是创造一个新的线程,并自动调用该线程的run()方法,直接调用run()方法是不会创造一个新线程的
-
执行一个线程实际就是执行该线程run方法中的代码
-
执行完aa.start();后并不表示aa所对应的线程就一定会立即得到执行,aa.start();执行完以后只是代表aa线程具有了可以立即被CPU执行的资格,但由于想抢占CPU执行的线程很多,cpu并不一定会立即执行aa所代表的线程
-
一个Thraed对象能且只能代表一个线程
-
一个Thraed对象不能调用两次start方法,否则会抛出异常
创建新线程的第二种方法
-
定义一个实现了Runnable接口的类,假定为A
-
创建A类对象aa,代码如下:
-
A aa = new A();
-
利用aa构造一个Thread对象tt
-
Thread tt = new Thread(aa);
-
调用tt中的start()方法
tt.start();//自动调用的是aa里面的run()方法
package bitter.xc.day.pkg1; class A implements Runnable{ public void run(){ while(true){ System.out.printf("AAAA!\n"); } } } public class BitterDay1 { public static void main(String[] args) { A aa = new A(); //aa.run(); //aa.start();error Thread t = new Thread(aa);//public Thread(Runnable r); t.start(); while(true){ System.out.printf("BBBB\n");
-