Java多线程(一)
1、并发:不同任务占用不同资源运行,比如一个进程需要使用使用IO和CPU,那么使用这两个资源的线程可以分别运行。
并行:线程同时执行,比如CPU有4核,就可以并行运行4个线程,减少上下文切换次数。
2、多进程编程:Java类,ProcessBuilder、RunTime、Linux下创建多进程的开销远远小于Windows,所以现在的服务器大多基于Linux。
3、Thread:对象可继承Thread来声明为一个线程类,类必须继承public void run() 来实现该线程要实现的功能,该类执行start()方法来启动一个线程。
运行结果:
每次运行的结果都不一定一样,注意main()方法作为第一个线程,beging thread make总是最先得到执行,然后执行线程类中的构造方发,如果线程类存在父类,则先执行父类构造方法在执行继承类构造方法,在执行run()方法。main()方法中for循环之后的代码不一定什么时候执行。
代码第5行有一个静态变量,第6行有一个普通变量,在构造函数和run()方法中使用tNumber的原因是,在Java内存管理中静态变量和对象一样存储在堆中,供大家共享,所以即使新建一个线程(新建一个ThreadOne类),如果使用静态变量threadNumber代替tNumber在函数中,得到的结果就全是Thread 4(1).......Thread 4(3)........,使用普通变量,则基本变量和对象引用存储在属于该线程的栈中,独立属于该线程,所以能得到Thread 1() Thread 3()等。
内部实现过程为:线程类调用start(),然后在调用run()。
4、Runable:因为Java中extends只能继承一个类,所以可以使用Runable接口来定义一个线程类。