????????本文主要讲java多线程的一些入门知识,包括线程的创建、调度、优先级、等待、休眠、中断及守护线程等...,在讲之前让我们先建立一个“数据字典”以简单了解多线程中出现的一些名词。
??
????????进程:进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础。可以简单的理解为运行中的应用程序。
????????多进程:允许计算机“同时”运行多个进程(应用程序)以提高CPU的利用率。
????????线程:线程是进程中的一个实体,是程序使用CPU的基本单位,也就是说线程是依赖进程而存在的。????????
????????多线程:在一个进程中同时有多个线程并发的执行。多线程可以提高应用程序的使用率。java多线程避免死锁
????????并行:指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU(多核)上同时执行。
????????并发:并发的实质是一个物理CPU(也可以多个物理CPU)在若干道程序(或线程)之间多路复用,并发是对有限物理资源强制行使多用户共享以提高效率。
????????在我们没接触多线程之前,我们所学到的都是有关顺序编程的知识。即程序中的所有事物在任意时刻都只能执行一个步骤。?? ??
??
????????不过java虚拟机(JVM)的启动却是多线程的。在我们每次运行java程序的时候就会有相应的java命令去启动JVM,JVM一启动也就相当于系统启动了一个进程,紧接着该进程就创建了一个主线程用于调用main方法,还创建了一个垃圾回收线程用于回收程序运行中可能出现的垃圾。也就是说JVM的启动至少运行着两个线程。那么我们如何实现自己的线程呢?
??
????????Java给我们提供了两种方式实现多线程,一种是继承Thread类,然后该子类应重写Thread类的run方法。例如,用于输出1 -- 10的线程可以写成:
package com.gk.thread.demo;
public class MyThread extends Thread{
@Override
public void run() {
for (int x=1; x<=10; x++) {
System.out.println(x);
}
}
}
????????然后就可以创建并启动一个线程:
MyThread mt = new MyThread();
mt.start();
????????另一种创建线程的方式是实现Runnable接口:
package com.gk.thread.demo;
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int x=1; x<=10; x++) {
System.out.println(x);
}
}
}
????????再在创建Thread时将Runnable作为参数来传递并启动:
Runnable runnable = new MyRunnable();
Thread th = new Thread(runnable);
th.start();
????????以上两种创建线程的方式都要实现run方法,那么run方法有什么作用呢?原来run方法是用来封装那些要被线程执行的代码的,因为我们的Thread类中可能不止有一个方法,run方法就是用来标记哪些代码将来要被线程执行。不过直接调用run方法也是不起多线程作用的。正如上面示例看到的那样,要启动线程,调用的是Thread类的start方法,然后JVM就会帮我们去调用该线程的run方法。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76705-1.html