/**
* @author cdw
*/
/**
* 进程是操作系统中运行的一个任务(一个应用程序运行在一个进程中)。
* 进程是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。
* 进程中所包含的一个或多个执行单元称为线程。进程还拥有一个私有的虚拟地址空间,该控件仅能被它所包含的线程访问.
* 线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程
*/
/**
*一个线程是进程的一个顺序执行流
*同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷
*小,因此,线程也被称为轻负荷进程
*一个进程中可以包含多个线程
*/
/**
*一个线程至少有一个线程
*线程的划分尺度小于进程,是的多线程程序的并发性高。另外,进程再执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了
*程序的运行效率。
*线程在执行过程中与进程的区别在于每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须存在应用
*程序中,由应用程序提供多个线程执行控制
*线程通常用于在一个程序中需要同时完成多个任务的情况,我们可以将每个任务定义为一个线程,是他们得以一同工作。
*也可以用于单一线程可以完成,但是使用多线程可以更快的情况,比如下载文件
*多个线程“同时”运行只是我们感官上的一种表现,事实上线程是并发运行的,OS将时间划分为很多时间片段,尽可能均匀分配给每一个线程,获取
*时间片段的线程被CPU运行,而其它线程全部等待。
*所以微观上是走走停停的,宏观上都在运行,这种现象叫并发,但是不是绝对意义上的“同时发生”。
*/
public class Demo10{
public static class TestThread extends Thread{
@Override
public void run() {
for(int i = 0;i < 100;i ++) {
System.out.println("我是线程");
}
}
}
public static void main(String[] args) {
Thread thread = new TestThread();//实例化线程
thread.start();//启动线程
}
}
public class Demo02 {
public static class TestThread{
public static void main(String[] args) {
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Runnable runnable = new TestRunnable();
Thread thread = new Thread(runnable);//实例化线程并传入线程体
thread.start();//启动线程
t1.start();
t2.start();
}
/*使用Thread创建并启动线程*/
static class MyThread extends Thread{
public void run() {
for(int i = 1; i <= 100;i++) {
System.out.println(i);
}
}
}
/*使用Runnable创建并启动线程*/
public static class TestRunnable implements Runnable{
@Override
public void run() {
for(int i = 0;i < 100;i++)
System.out.println("我是线程");
}
}
}
}
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Demo04 {
public static class TestRunnable extends JFrame implements Runnable{
public static void main(String[] args) {
TestRunnable r = new TestRunnable();
r.setSize(300,300);
r.setVisible(true);
r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Thread t = new Thread(r);
t.start();
}
public void run() {
int i = 0;
JPanel panel = new JPanel();
panel.setSize(300,300);
this.setContentPane(panel);
while(true) {
i = i == 0 ? 1 :0;
if(i == 0) {
panel.setBackground(Color.BLACK);
}else {
panel.setBackground(Color.WHITE);
}
}
}
}
}