======================================================================
JAVA 第十三天
=====================================================================
JAVA 第十三天
=====================================================================
上午的内容:
Action 的事件源
JButton 按下激发 Action
JTextField 敲回车会激发 Action
JList 鼠标双击激发
JMenuItem 选中菜单项激发
====================================================================
下午: 多线程:
每一个线程由3部分组成: CPU,代码,数据
进程和线程本的区别: 对于进程,数据空间独占.线程的数据空间是共享的.堆空间是对象.堆是多线程共享的.
在JAVA一个线程是一个对象.Thread
一个线程对象代表了一个线程. 他不是线程.线程是操作系统维护的一种系统资源.
线程的状态图: 初始状态--------->可运行状态---------->运行状态--------->结束状态
start
只有处在运行状态他才有机会执行代码,在那等着. 操作系统选择在可运行状态的线程中挑选一个进入运行状态,当一个CPU时间片到期了,这在运行的线程,会回到可运行状态.当RUN方法退出而时候,他会进入终止状态. 当所有的线程都进入终止状态的时候,虚拟机进程才会结束.
在运行状态会进入堵塞: 等待输入,不再堵塞了,会进入可运行状态从新排队.
进入堵塞状态情况: 等待输入,Thread.sleep(100); Thread.join()静态方法会把调用他的线程堵塞.当加入的线程进入终止状态的时候,当前线程才会进入运行状态.
Thread.yield() 静态方法 放弃CPU的使用权.
Thread.setPriority(int i) 1---10, 数字越大优先级越高.一般来说没什么用
(2) 关于 Runnable() 的例子
package thread;
public class TestTread {
public static void main(String[] args) {
Thread t=new Thread();// 代表了一个线程,不是一个线程.而是一个对象,管理线程.
t.start();// 到底层的操作系统申请线程.
Thread t1=new MyThread1();
Thread t2=new MyThread2();
Runnable r1=new MyThread3();
Thread t3=new Thread(r1);
t1.start();
t2.start();
t3.start();
}
}
class MyThread1 extends Thread{
public void run(){
for(int i=0;i<20;i++){
System.out.println(i+" $$$$$$");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyThread2 extends Thread{
public void run(){
for(int i=0;i<20;i++){
System.out.println(i+" ######");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyThread3 implements Runnable{// 是目标对象,通过目标对象构造一个线程对象.
public void run(){
for(int i=0;i<20;i++){
System.out.println(i+" @@@@");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
(3) 关于Thread.join() 的例子
package thread;
public class TestThread {
public static void main(String[] args) {
Thread t1=new MyThread1();// 代表了一个线程,不是一个线程.而是一个对象,管理线程.
Thread t2=new MyThread2(t1);
t1.start();// 到底层的操作系统申请线程.
t2.start();
}
}
class MyThread1 extends Thread{
public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+" $$$");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread2 extends Thread{
Thread t;
public MyThread2(Thread t) {
this.t = t;
}
public void run(){
for(int i=1;i<=20;i++){
System.out.println(i+" ###");
try {
Thread.sleep(100);
if (i==10) t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Action 的事件源
JButton 按下激发 Action
JTextField 敲回车会激发 Action
JList 鼠标双击激发
JMenuItem 选中菜单项激发
====================================================================
下午: 多线程:
每一个线程由3部分组成: CPU,代码,数据
进程和线程本的区别: 对于进程,数据空间独占.线程的数据空间是共享的.堆空间是对象.堆是多线程共享的.
在JAVA一个线程是一个对象.Thread
一个线程对象代表了一个线程. 他不是线程.线程是操作系统维护的一种系统资源.
线程的状态图: 初始状态--------->可运行状态---------->运行状态--------->结束状态
start
只有处在运行状态他才有机会执行代码,在那等着. 操作系统选择在可运行状态的线程中挑选一个进入运行状态,当一个CPU时间片到期了,这在运行的线程,会回到可运行状态.当RUN方法退出而时候,他会进入终止状态. 当所有的线程都进入终止状态的时候,虚拟机进程才会结束.
在运行状态会进入堵塞: 等待输入,不再堵塞了,会进入可运行状态从新排队.
进入堵塞状态情况: 等待输入,Thread.sleep(100); Thread.join()静态方法会把调用他的线程堵塞.当加入的线程进入终止状态的时候,当前线程才会进入运行状态.
Thread.yield() 静态方法 放弃CPU的使用权.
Thread.setPriority(int i) 1---10, 数字越大优先级越高.一般来说没什么用
(2) 关于 Runnable() 的例子
package thread;
public class TestTread {
public static void main(String[] args) {
Thread t=new Thread();// 代表了一个线程,不是一个线程.而是一个对象,管理线程.
t.start();// 到底层的操作系统申请线程.
Thread t1=new MyThread1();
Thread t2=new MyThread2();
Runnable r1=new MyThread3();
Thread t3=new Thread(r1);
t1.start();
t2.start();
t3.start();
}
}
class MyThread1 extends Thread{
public void run(){
for(int i=0;i<20;i++){
System.out.println(i+" $$$$$$");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyThread2 extends Thread{
public void run(){
for(int i=0;i<20;i++){
System.out.println(i+" ######");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyThread3 implements Runnable{// 是目标对象,通过目标对象构造一个线程对象.
public void run(){
for(int i=0;i<20;i++){
System.out.println(i+" @@@@");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
(3) 关于Thread.join() 的例子
package thread;
public class TestThread {
public static void main(String[] args) {
Thread t1=new MyThread1();// 代表了一个线程,不是一个线程.而是一个对象,管理线程.
Thread t2=new MyThread2(t1);
t1.start();// 到底层的操作系统申请线程.
t2.start();
}
}
class MyThread1 extends Thread{
public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+" $$$");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread2 extends Thread{
Thread t;
public MyThread2(Thread t) {
this.t = t;
}
public void run(){
for(int i=1;i<=20;i++){
System.out.println(i+" ###");
try {
Thread.sleep(100);
if (i==10) t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}