java线程
进程:是一个程序执行的实体。它是表示资源分配的基本单位,又是调度运行的基本单位。假如,我们运行一个自己的程序,系统就创建一个进程,为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。
线程:线程是进程中执行运算的最小单位,是程序执行的一条路径,即线程存在于进程之中,一个进程至少由一个或多个线程组成。但是一个线程只属于一个进程。
.在java中多线程的实现有两种方式
- 继承thread类
`
class MyThread1 extends Thread{
@Override
public void run() {
super.run();
for(int i=0;i<50;i++) {
System.out.println(getName()+”开始下载了 i=”+i);
}
}
}class MyThread2 extends Thread{ @Override public void run() { super.run(); for(int i=0;i<50;i++) { System.out.println(getName()+"开始下载了 i="+i); } } } public class Thread2 { public static void main(String[] args) { System.out.println("这是主线程"); for(int i=0;i<50;i++) { System.out.println("这是主线程 i="+i); } MyThread1 myThread1=new MyThread1(); myThread1.setName("线程1"); myThread1.start(); MyThread2 myThread2=new MyThread2(); myThread2.setName("线程2"); myThread2.start(); } }
`
2 . 实现Runnable
` class RunnableImpl implements Runnable{ @Override public void run() { //必须实现run方法 for(int i=0;i<50;i++) { System.out.println(Thread.currentThread().getName()+"开始下载了 i="+i); } } public class TestThread { public static void main(String[] args) { 获取当前运行子线程的名字 System.out.println(Thread.currentThread().getName()+"开始运行"); System.out.println("子线程运行"); RunnableImp runnableImpl = new RunnableImpl(); //创建Runnable子类对象 Thread thread = new Thread(runnableImpl); //创建Thread对象,并传入Runnale子类的对象 thread.setName("线程"); thread.start(); //启动线程 } } `
- 那么对于这两种创建线程的方式,第一种继承Thread,代码量少简单,但是切记java都是单继承的,如果你的一个线程类有了其他父类,那么这种方法就失效了;第二种实现Runnable接口,代码量多,有点繁琐,执行效率不如第一种方法高,但是可以继承其它父类,不会影响线程运行。所以,在java编程中一般都会使用实现接口的方式创建线程。