java工作笔记之多线线程实例详解
一、多线程
1.什么是多线程
简单的可以理解为多个线程同时执行多个任务,比如同时下载10个URL 的速度会比一个个下载快的多。
有兴趣深入研究原理可以学习下什么叫线程,进程
2.java多线程Thread方法小例子
extends Thread 的方式进行一次多线程实验
3.runable例子
二、java采用Runnable 实现多线线程
使用实现Runnalbe可以做出一个多线程,之前我们采用继承Thread的办法也做出一个。
public class TestMitiThread1 implements Runnable {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() " 线程运行开始!");
TestMitiThread1 test = new TestMitiThread1();
Thread thread1 = new Thread(test);
Thread thread2 = new Thread(test);
thread1.start();
thread2.start();
System.out.println(Thread.currentThread().getName() " 线程运行结束!");
}
public void run() {
System.out.println(Thread.currentThread().getName() " 线程运行开始!");
for (int i = 0; i < 10; i ) {
System.out.println(i " " Thread.currentThread().getName());
try {
Thread.sleep((int) Math.random() * 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() " 线程运行结束!");
}
}
java多线程要注意的地方
多线程都会遇到主线程控制的事情,一个宿主分发了多个任务出去,如何知道各自的完成情况。就需要子线程给宿主报告。
1、明确目的,为什么要使用多线程?如果是由于单线程读写或者网络访问(例如HTTP访问互联网)的瓶颈,可以考虑使用线程池。如果是对不同的资源(例如SOCKET连接)进行管理,可以考虑多个线程。
2、线程使用中要注意,如何控制线程的调度和阻塞,例如利用事件的触发来控制线程的调度和阻塞,也有用消息来控制的。
3、线程中如果用到公共资源,一定要考虑公共资源的线程安全性。一般用LOCK锁机制来控制线程安全性。一定要保证不要有死锁机制。
4、合理使用sleep,何时Sleep,Sleep的大小要根据具体项目,做出合理安排。一般原则非阻塞状态下每个循环都要有SLeep,这样保证减少线程对CPU的抢夺。每次线程的就绪和激活都会占用一定得资源,如果线程体如果有多个循环,多处使用SLEEP将导致性能的下降。
5、线程的终止一般要使线程体在完成一件工作的情况下终止,一般不要直接使用抛出线程异常的方式终止线程。
6、线程的优先级一定根据程序的需要要有个整体的规划。
Thread继承
常见的网络爬虫,如果你每次等待上个链接爬取完毕,下一个再开始,不是要等到天荒地老。所以多线程技术的运用,方便的解决了这个问题。
java多线程编程两个要点
1.类后面加个 extends Thread 就算多线程了。
2.必须有一个函数叫run()
public class ThreadExample extends Thread{
public String color = "red";
public ThreadExample(String color){
this.color = color;
}
public void run(){
//System.out.println(this.color);
for (int i = 0; i < 3; i ) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(this.color "运行 " i);
}
}
/**
* @param args
*/
public static void main(String[] args) {
ThreadExample te = new ThreadExample("red");
ThreadExample te2 = new ThreadExample("blue");
te.run();
te2.run();
}
}
run()执行效果
red运行 0
red运行 1
red运行 2
blue运行 0
blue运行 1
blue运行 2
如果是多线程运行,说明两个对象并行执行 red 和 blue 一起向前走,所以java多线程情况下输出结果
改成
te.start();
te2.start();
red运行 0
blue运行 0
red运行 1
blue运行 1
red运行 2
blue运行 2
请牢记 多线程启动为te.start(); 尽管那个执行的函数为必须叫run();
您可能感兴趣的文章:
java工作笔记之多线线程实例详解
java多线程的优先级实例程序
经典Java线程面试题70道
多线程程序设计 (转)
Java多线程原理及ThreadLocal多线程实例详解
Go 并发编程的思考
一文读懂什么是进程、线程、协程
笔记本电脑搜索不到无线信号怎么办?如何解决
java多线程休眠工作笔记
java多线程学习笔记之线程安全