应用程序在内存中开辟空间-进程;
内存-大脑容量;
反应切换的速度-CPU;
试图去尝试别的进程的地址空间---病毒;
线程是由进程(应用程序)创建的;
涉及到并发,就会涉及到线程;迅雷下载;
线程不会跑出到进程外面去的;
地址空间是由操作系统和JVM决定的;
32/64位,CPU的寻址空间范围,加载内存的大小;
线程的调度:
CPU、内存资源OK?--->Running,运行状态;
运行过程CPU,内存不够---->Blocked,阻塞状态;
资源空闲,可用------->Runnable可运行状态;
最后,退出程序---->Dead死亡;
(和人出生,生病,工作,死亡一样的)
JAVA中任何一个类都可当做线程来使用;
没有手动调用,通过start会启动进程;
休眠-blocked状态;
sleep会导致线程进入阻塞状态;释放资源;
sleep可以定时,做定时器;数据库的清洗;
Blocked-Runnable-Running不停转;
转10次以后,自动死亡-times:
退出循环,线程死亡了。
JAVA中不允许多继承,Panel类已经继承了JPanel,
JAVA中的Panel类,通过Runnable接口实现多线程:
class Dog implements Runnables;
重写run函数;
启动的时候先创建线程对象;
把dog放进去;
---------------------------------------------
线程--什么是进程
进程--概念
要解释线程,就必须明白什么是进程,就好象要搞清中国历史,就必须要了解春秋战国。
什么是进程呢?
进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击左面的IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。目前操作系统都支持多进程。
要点:用户每启动一个进程,操作系统就会为该进程分配一个独立的内存空间。
线程--概念
在明白进程后,就比较容易理解线程的概念。
什么是线程呢?
是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪、阻塞和运行三种基本状态。
线程
1、线程是轻量级的进程
2、线程没有独立的地址空间(内存空间)
3、线程是由进程创建的(寄生在进程)
4、一个进程可以拥有多个线程-->这就是我们常说的多线程编程
5、线程有几种状态:
a、新建状态(new)
b、就绪状态(Runnable)
c、运行状态(Running)
d、阻塞状态(Blocked)
e、死亡状态(Dead)
线程有什么用处
java程序中流传一句话,不会使用线程就别跟别人说自己学过java。目前绝大部分应用程序都会涉及到多并发的问题。只要应用程序涉及到并发,就离不开多线程编程。
线程--如何使用
在java中一个类要当作线程来使用有两种方法。
1、继承Thread类,并重写run函数
2、实现Runnable接口,并重写run函数
因为java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程。
通过继承Thread类来实现建立线程实例[Thread01.java]
/**
* 演示如何通过继承Thread来开发线程
*/
public class Thread01 {
public static void main(String[] args) {
//创建一个 Cat对象
Cat cat=new Cat();
//启动线程
cat.start();//.start()会导致run函数运行
}
}
class Cat extends Thread{
int times=0;
//重写run函数
public void run(){
while(true){
//休眠一秒
//1000表示1000毫秒
try {
Thread.sleep(1000);//sleep就会让该线程进入到Blocked阻塞状态,并释放资源。
} catch (Exception e) {
e.printStackTrace();
}
times++;
System.out.println("hello,world!"+times);
if(times==10){
//退出线程
break;
}
}
}
}
34
1
/**
2
* 演示如何通过继承Thread来开发线程
3
*/
4
public class Thread01 {
5
public static void main(String[] args) {
6
//创建一个 Cat对象
7
Cat cat=new Cat();
8
//启动线程
9
cat.start();//.start()会导致run函数运行
10
}
11
}
12
13
class Cat extends Thread{
14
int times=0;
15
//重写run函数
16
public void run(){
17
while(true){
18
//休眠一秒
19
//1000表示1000毫秒
20
try {
21
Thread.sleep(1000);//sleep就会让该线程进入到Blocked阻塞状态,并释放资源。
22
} catch (Exception e) {
23
e.printStackTrace();
24
}
25
times++;
26
System.out.println("hello,world!"+times);
27
if(times==10){
28
//退出线程
29
break;
30
}
31
}
32
}
33
}
34
----------------------------------------
通过Runnable接口来实现建立线程实例[Thread02.java]
/**
* 演示如何通过Runnable接口来开发线程
*/
public class Thread02{
public static void main(String []args){
Dog dog=new Dog();
//创建线程
Thread t=new Thread(dog);
//启动线程
t.start();
}
}
class Dog implements Runnable{//创建Runnable接口
public void run(){//重写run函数
int times=0;
while(true){
try{
Thread.sleep(1000);
}catch (Exception e) {
e.printStackTrace();
}
times++;
System.out.println("hello,wrold!"+times);
if(times==10){
break;
}
}
}
}
x
1
/**
2
* 演示如何通过Runnable接口来开发线程
3
*/
4
public class Thread02{
5
public static void main(String []args){
6
Dog dog=new Dog();
7
//创建线程
8
Thread t=new Thread(dog);
9
//启动线程
10
t.start();
11
}
12
}
13
class Dog implements Runnable{//创建Runnable接口
14
public void run(){//重写run函数
15
int times=0;
16
while(true){
17
try{
18
Thread.sleep(1000);
19
}catch (Exception e) {
20
e.printStackTrace();
21
}
22
times++;
23
System.out.println("hello,wrold!"+times);
24
if(times==10){
25
break;
26
}
27
}
28
}
29
}
30
原文地址:https://www.cnblogs.com/xuxaut-558/p/10045741.html