线程同步:
并行和并发
并行:指两个或者多个时间再同一个时刻发生 (只能多核才可以)
并发:指两个或者多个时间在同一段时间发生(有先后发生的概念)
时间片:CPU分配给各个程序的运行时间(很小的概念)
进程:一个内存中运行的应该用的程序,不同的进程内存空间不一样,一个应用程序可以运行多个进程
线程:进程中的一个执行单元 一个进程可以执行多个线程(多线程)
线程和进程的区别:
进程 有独立的内存空间,一个进程至少一个线程
线程 堆空间共享数据 创建线程的空间比进程少很多 进程元
线程调度是由虚拟机来决定的 (抢占式调度 分时调度) java的进程至少两个 一个主线程 一个垃圾回收线程
多线程的优势:
多线程作为一种多任务 并发的工作方式的优势 (多线程下载)
1.线程可以共享内存
2.线程消耗的资源小
3.分配由java虚拟机来调度
操作进程:
//运行一个线程 方式1
Runtime time=Runtime.getRuntime();
time.exec(“notepad”);
//方式2
ProcessBuilder pb=new ProcessBuilder(“notepad”);
pb.start();
创建和启动线程
java.lang.Thread 包
package cn.bdqn.manytread;
import java.io.IOException;
import java.lang.Thread;
/**
* 多线程的演示
* @author ASUS
*
*/
class A implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<50;i++)
{
System.out.println("播放音乐");
}
}
}
class B extends Thread
{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<50;i++)
{
System.out.println("播放音乐");
}
}
}
public class GameDemo {
public static void main(String[] args) throws IOException {
/*System.out.println();
//运行一个线程 方式1
Runtime time=Runtime.getRuntime();
time.exec("notepad");
//方式2
ProcessBuilder pb=new ProcessBuilder("notepad");
pb.start();*/
//使用继承创建和运行线程 方式1
//1.定义一个类a 让a继承java.lang.Thread类
//2.在a类中覆盖run方法
//3.我们在run方法中编写要执行的操作 run线程执行体
//4.在main中创建线程对象 并启动线程
//A a=new A();
for(int i=0;i<50;i++)
{
System.out.println("打游戏");
if(i==10)
{
B b=new B();//创建线程。
b.start();//启动线程
}
}
//通过实现Runnable实现线程
//1.定义一个过一个类 实现 Runnalble接口
//2.在A类中覆盖Runable中run方法
//3.编写run
//4.创建 启动线程 (注:A不属于线程类 只有Thread及其子类是线程类)
//但是Thread类中有Runnable对象构造器
for(int i=0;i<50;i++)
{
System.out.println("打游戏");
if(i==10)
{
A a=new A();
Thread t=new Thread(a);
t.start();//启动线程
}
}
//匿名内部类 实现线程的创建和启动
new Thread(
new Runnable(){
public void run()
{
}
}
).start();
new Thread(){
//覆盖run方法
public void run()
{
}
}.start();
}
}