对java多线程的理解
2013-05-21 22:45
218 查看
在理解多线程之前我们要理解进程和线程:
进程指每个独立程序在计算机上的一次执行活动,例如QQ,360管家线程就是一个程序内部的一条执行路径,如果一个程序中可以同一时间执行多个线程,我们就说这个程序是支持多线程的;比如迅雷下载软件可以同时下载多个任务。
什么事多线程?
多线程可以理解成多任务,一个程序在同一时间内执行多个任务,每个任务通常可以理解成一个线程,这种能执行多个线程的程序称之为多线程程序。为什么需要多线程?
多线程作为一种多任务并发的工作方式,具有以下特点:提高应用程序响应
提高计算机CPU的利用率
改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
线程状态:新建、可运行、阻塞、等待、中止等,如图:
创建新线程的方式:
继承Thread类 2.实现Runnable接口声明线程:
单线程:Thread 线程名 = new Thread(new 线程类());
多线程:
线程类 对象名A=new 线程类();
Thread 线程名1=new Thread(对象名A);
Thread 线程名2=new Thread(对象名A);
代码如下:
/**
*
* 实现Runnable接口创建线程
*
*/
public class FirstThread implements Runnable {
public void run() {
//要在线程中执行的代码
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"MyRunnable:"+i);
}
}
}
/**
* 继承Thread创建线程
*/
/*public class FirstThread extends Thread(){
public void run(){
//要在线程中执行的代码
for(int i=0;i<100;i++){
System.out.println("MyThread:"+i);
}
}*/
public class FirstThreadTest {
/**
* 创建和启动多个线程
*/
public static void main(String[] args) {
System.out.println("主线程开始执行。。。。");
/* 声明线程1 */
Thread t1 = new Thread(new FirstThread());
/* 启用线程 */
t1.start();
Thread t2 = new Thread(new FirstThread());
t2.start();
}
}
1. 线程睡眠:
/**
*
* 线程睡眠:
* 1.线程体中调用sleep()方法使当前线程进入睡眠状态,调用sleep()方法
* 需要传入一个毫秒数作为当前线程的睡眠时间,线程睡眠相应的时间便会苏醒,
* 重新进入可执行状态
* 2.在实际案例开发中,为了调整各个子线程的执行顺序,可以通过
* 线程睡眠的方式来完成
*
*/
public class ThreadSleep implements Runnable {
public void run() {
try {
Thread.sleep(100);//让线程睡100毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class ThreadSleepTest {
/**
* 线程睡眠测试
*/
public static void main(String[] args) {
System.out.println("主线程执行。。。");
//声明线程
Thread t1=new Thread(new ThreadSleep());
//启用线程
t1.start();
Thread t2=new Thread(new ThreadSleep());
t2.start();
}
}
//问题:打印出很多重复的数字。。。
2. 线程让步:
/**
*
* Thread.yield()方法会暂停当前正在执行的线程对象,把执行机会
* 让给相同或更高优先级的线程。
*
*/
public class ThreadYield implements Runnable {
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+": "+i);
if(i%10==0){//当i能被10整除时,当前线程让步给其他线程
Thread.yield();
}
}
}
}
public class ThreadYieldTest {
/**
* 线程让步测试
*/
public static void main(String[] args) {
Thread t1=new Thread(new ThreadYield());
t1.start();
Thread t2=new Thread(new ThreadYield());
t2.start();
}
}
3. 线程的加入:
/**
*
* 线程的加入:
* 有时需要线程间的接力来完成某项任务,这需要调用线程类jion()方法,jion()方法
* 可以使两个交叉执行的线程编程顺序执行。
* 注:A线程加入到B线程中,等A线程执行完了B线程才会拿到执行权开始执行。
* (Jion谁就是要等谁执行结束)
*
*/
public class ThreadJion implements Runnable {
public void run() {
for(int i=0;i<=20;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadJionTest {
/**
* 线程的加入测试类
*/
public static void main(String[] args) {
Thread t1=new Thread(new ThreadJion());
t1.start();
/*主线程执行for循环*/
for(int i=1;i<=50;i++){
System.out.println(Thread.currentThread().getName()+": "+i);
if(i==30){
try {
t1.join(); //把子线程加入到主线程执行
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
相关文章推荐
- 深入理解Java多线程中的wait(),notify()和sleep()
- Java多线程中join方法的理解
- Java多线程理解(线程安全)
- java多线程(5)之线程池概念理解
- Java多线程-从基础到深入理解-01
- 深入理解Java多线程中的wait(),notify()和sleep()
- 深入理解 Java 多线程核心知识:跳槽面试必备
- java多线程理解
- 对java多线程的一些浅浅的理解
- Java多线程(慢慢理解)
- java 多线程 Synchronized方法和方法块 synchronized(this)和synchronized(object)的理解
- java多线程 对volatile理解 第四天
- 理解java多线程中ExecutorService使用
- Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解
- 并发编程之美-深入理解java多线程原理
- Java多线程的理解
- [Java多线程 十]---JUC包下线程池的理解
- 深入理解Java多线程中的wait(),notify()和sleep()
- 黑马程序员——Java基础---理解多线程
- Java—Java多线程中join方法的理解