1.java多线程
[1]进程:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销
一个进程包含1-n个线程
[2]线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,
线程间的切换开销小。
多进程是指操作系统同时运行多个任务(程序)
准备状态 runnable 用户调用start方法线程进入准备状态
运行 running 执行线程体代码
结束 teminated 线程体内的代码执行完毕
等待 sleep, wait/notify
[1]进程:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销
一个进程包含1-n个线程
[2]线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,
线程间的切换开销小。
多进程是指操作系统同时运行多个任务(程序)
多线程是指同一个程序中有多个顺序流在属性
package com;
public class DownloadThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
//下载顺序流
while(true){
System.out.println("下载");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com;
public class MusicThread extends Thread {
//子线程体
@Override
public void run() {
// TODO Auto-generated method stub
//听歌的顺序流
while(true)
{
System.out.println("听歌");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com;
public class Test {
//主线程
//主线程体
public static void main(String[] args) {
// TODO Auto-generated method stub
MusicThread musicThread = new MusicThread();
DownloadThread downLoadThread = new DownloadThread();
//开启两个子线程
//开启听歌线程,执行run方法中的代码
musicThread.start();
//开启下载线程,执行run方法中的代码
downLoadThread.start();
//线程抢占cpu,谁抢到cpu,谁执行代码
}
}
[3]开启线程的两种方式
继承Thread类
实现Runnable接口 -------常用
package ppt;
public class MyRunnable implements Runnable {
//该方法被线程体调用
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("子线程运行中...");
}
}
package ppt;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//第二种开启线程的方式
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
[4]线程六种状态
创建线程对象 new
准备状态 runnable 用户调用start方法线程进入准备状态
运行 running 执行线程体代码
结束 teminated 线程体内的代码执行完毕
等待 sleep, wait/notify
阻塞 等待键盘输入,服务器等待客户端连接
package ppt03;
public class MyRunnable implements Runnable {
boolean isRun = true;
@Override
public void run() {
// TODO Auto-generated method stub
while(isRun)
{
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package ppt03;
import java.util.Scanner;
public class Test {
publ