Java多线程和并发编程实践的学习心得----基础篇
2014-10-23 20:16
741 查看
Java多线程和并发编程实践的学习心得1----基础篇
一java线程的基本知识
1、线程:线程是程序运行的基本执行单元,线程是一个程序内部的顺序控制流。进程是操作系统中一个个独立的运行单元。每个进程独享一块内存空间。2、线程和进程的区别:
每个进程都有独立的代码和数据空间,进程间切换会有较大的开销;
线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换的开销小;
多进程:在操作系统能同时运行多个任务;
多线程:在同一程序中有多个顺序流同时执行。
上图是java的一个进程中有2个线程在JVM(java虚拟机中)的抽象运行模型,很好理解。
3、线程的创建与启动
方法一:实现Runnable接口。
通过Thread th = new Thread(target);//targer为实现Runnable接口对象;
其中Runnable接口只有一个方法:public void run()//用于定义线程运行体;
Runnable接口可以为多个线程提供共享的数据;
在实现Runnable接口的类的run()方法定义中可以使用Thread的静态方法:
public static Thread currentThread()获取当前线程的引用。
方法二:定义一个Thread的子类并重写其run()方法。
生成该类的对象:MyThread mt = new MyThread();//MyThread继承Thread类。
4、
java线程的优先级:
java线程的优先级从1到10: Thread.MAX_PRIORITY = 10;
Thread.MIN_PRIORITY= 1;
Thread.NORM_PRIORITY= 5;
使用如下方法操作优先级: int getPriority();
voidsetPriority(int i);
5、线程控制的基本方法
这是一个很经典的java线程的控制状态图:
这个也是很经典的java线程控制方法,很基础的方法,但很有用。在后面可能还会经常的见到他们。
还有一个比较重要的方法: sleep方法:线程的静态方法:publicstatic void sleep(long millis) throws InterruptedException使当前线程休眠long毫秒。由于是静态方法,可以由线程直接调用:Thread.sleep(...);
6、线程间的通信
上图是JMM(Java内存模型)中线程之间通信的模型图。仔细体会。
多线程重在思想,重在理解。下面就贴上多线程入门的线程计数器的例子程序:
package com.qyl.dome1; import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class SeparateSubTask extends Thread{ private int count = 0; private Counter2 c2; private boolean runFlag = true; public SeparateSubTask(Counter2 c2){ this.c2 = c2; this.start(); } public void invertFlag(){ runFlag = !runFlag; } public void run(){ while(true){ try { sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(runFlag); if (runFlag){ c2.tF.setText(Integer.toString(count++)); } } } } public class Counter2 extends Applet { private Button onOff = new Button("Toggle"); private Button start = new Button("Start"); TextField tF = new TextField(10); private SeparateSubTask sp; public void init() { this.add(tF); this.add(onOff); this.add(start); start.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(sp==null) sp = new SeparateSubTask(Counter2.this); } }); onOff.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(sp != null) sp.invertFlag(); } }); } public static void main(String[] args) { Counter2 applet = new Counter2(); Frame mFrame = new Frame(); mFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); mFrame.add(applet, BorderLayout.CENTER); mFrame.setSize(300, 200); applet.init(); applet.start(); mFrame.setVisible(true); } }这里面主要有3个线程,一个UI线程,一个计数器线程,还有一个是垃圾回收器线程。程序很简单。
相关文章推荐
- Java多线程和并发编程实践的学习心得----基础篇2
- Java多线程和并发编程实践的学习心得----基础篇3
- Java多线程学习-并发编程实践基本概念总结整理
- java多线程和并发编程学习总结 ----基础篇4
- Java多线程编程--(6)学习Java5.0 并发编程包--原子操作的一些类型
- java多线程与并发之java并发编程实践(三)
- java线程学习(九)—并发编程实践学习
- Java多线程编程--(7)学习Java5.0 并发编程包--Lock & Condition
- java多线程与并发之java并发编程实践(五)
- 学习JAVA多线程编程 --- 《JAVA多线程编程核心技术》第2章 对象及变量的并发访问 笔记
- java多线程与并发之java并发编程实践(一)
- java多线程与并发之java并发编程实践(四)
- java多线程与并发之java并发编程实践(七)
- java并发编程学习总结(基础篇)
- 多线程学习之深入理解Java多线程与并发编程
- Java 并发编程深入学习(一)——实现多线程的方式
- JAVA并发设计模式学习笔记(一)—— JAVA多线程编程
- 学习java并发编程实战的一些心得体会(一)
- java多线程与并发之java并发编程实践(二)
- java并发编程实践学习笔记