教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 java工作笔记之多线线程实例详解

java工作笔记之多线线程实例详解

发布时间:2016-11-01   编辑:jiaochengji.com
教程集为您提供java工作笔记之多线线程实例详解等资源,欢迎您收藏本站,我们将为您提供最新的java工作笔记之多线线程实例详解资源
多线程是java中的一个非常有意思的功能了,最近学习java开发了下面把我学习的笔记给各位同学介绍一下吧,内容主要是网上收集的哦。

一、多线程

1.什么是多线程

简单的可以理解为多个线程同时执行多个任务,比如同时下载10个URL 的速度会比一个个下载快的多。
有兴趣深入研究原理可以学习下什么叫线程,进程

2.java多线程Thread方法小例子

extends Thread 的方式进行一次多线程实验

3.runable例子

二、java采用Runnable 实现多线线程


使用实现Runnalbe可以做出一个多线程,之前我们采用继承Thread的办法也做出一个。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7368')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7368>

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 &lt; 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()

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy8692')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy8692>package com.javaer.examples;
 
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 &lt; 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多线程学习笔记之线程安全

[关闭]
~ ~