为什么需要多线程?

. 模型的简化,如某些程序是由多个相对独立任务的运行:

. 图形界面的出现,输入、输出的阻塞

. 多核CPU的更好利用

. 异步行为的需要

Java多线程的特性:

. 程序的入口main本身是一个线程

. 线程是并发的,无序执行的

. 线程内部是顺序执行的

. 共享数据

Java多线程的风险:

. 安全风险:由于线程的操作顺序是不确定的,某些在单线程下能运行的程序到多线程下会出现意外的结果。

. 性能风险:服务器的吞吐量、响应性、资源消耗

Java多线程API:

Java可以通过两种形式创建线程:一、实现Runnable接口,二、继承Thread类。

  1. public class ThreadTest extends Thread {
  2. public static void main(String[] args) {
  3. ThreadTest thread = new ThreadTest();
  4. thread.start();
  5. for (int i=0; i<10; i++) {
  6. System.out.println("main:"+i);
  7. }
  8. }
  9. @Override
  10. public void run() {
  11. for (int i=0; i<10; i++) {
  12. System.out.println("thread:"+i);
  13. }
  14. }
  15. }
  1. package com.openrdp.thread.api;
  2. public class RunnableTest implements Runnable {
  3. public static void main(String[] args) {
  4. RunnableTest runnable = new RunnableTest();
  5. Thread thread = new Thread(runnable);
  6. thread.start();
  7. for (int i=0; i<10; i++) {
  8. System.out.println("main:"+i);
  9. }
  10. }
  11. @Override
  12. public void run() {
  13. for (int i=0; i<10; i++) {
  14. System.out.println("thread:"+i);
  15. }
  16. }
  17. }

Java线程池技术:

  1. package com.openrdp.thread.api;
  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;
  4. public class TreadPoolTest {
  5. public static void main(String[] args) {
  6. ExecutorService threadPool = Executors.newFixedThreadPool(99);
  7. TaskThread thread1 = new TaskThread("t1");
  8. threadPool.execute(thread1);
  9. TaskThread thread2 = new TaskThread("t2");
  10. threadPool.execute(thread2);
  11. }
  12. static class TaskThread implements Runnable {
  13. String param;
  14. public TaskThread(String param) {
  15. this.param = param;
  16. }
  17. @Override
  18. public void run() {
  19. }
  20. }
  21. }

java线程入门知识的更多相关文章

  1. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  2. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  3. java线程基础知识----线程与锁

    我们上一章已经谈到java线程的基础知识,我们学习了Thread的基础知识,今天我们开始学习java线程和锁. 1. 首先我们应该了解一下Object类的一些性质以其方法,首先我们知道Object类的 ...

  4. Java线程入门第一篇

    Java线程的状态有6种 1.  初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2.  运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...

  5. java线程基础知识----线程基础知识

    不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...

  6. java线程基础知识----java daemon线程

    java线程是一个运用很广泛的重点知识,我们很有必要了解java的daemon线程. 1.首先我们必须清楚的认识到java的线程分为两类: 用户线程和daemon线程 A. 用户线程: 用户线程可以简 ...

  7. java线程入门一

    线程优先级: 在JAVA线程中,通过一个int型变量priority来控制线程优先级,线程的有限机为1-10,默认为5,优先级高的线程获得的运行时间要高于优先级低的线程.但这只是一个提示,操作系统和J ...

  8. Java线程基础知识(状态、共享与协作)

    1.基础概念 CPU核心数和线程数的关系 核心数:线程数=1:1 ;使用了超线程技术后---> 1:2 CPU时间片轮转机制 又称RR调度,会导致上下文切换 什么是进程和线程 进程:程序运行资源 ...

  9. Java线程入门第二篇

    Java线程通信方法 0.(why)每个线程都有自己的栈空间,我们要线程之间进行交流,合作共赢. 1.synchronized和volatile关键字 a)  看下面的synchronized关键字 ...

随机推荐

  1. HTTP 返回码中 301 与 302 的区别

    转自:http://blog.csdn.net/qmhball/article/details/7838989 一.官方说法301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之 ...

  2. js声明变量作用域会提前

    var s = 1; function test() { console.info(s); var s = 2; console.info(s); } test(); >>>unde ...

  3. Solr学习记录:Getting started

    目录 Solr学习记录:Getting started 1.Solr Tutorial 2. A Quick Overview Solr学习记录:Getting started 本教程使用环境:jav ...

  4. vue监听页面大小变化重新刷新布局

    在项目中由于某些div元素在布局的时候需要初始化宽高,因为当浏览器缩小屏幕的时候需要重新刷新页面视图. 分析思路: 1.在store中创建state,用于保存当前浏览器的宽.高值. 2.在mounte ...

  5. 基于SSH的J2EE Web系统配置文件

    1. web.xml 关于Servlet Servlet是一个特殊的Java类,Servlet可以输出HTML标签作为表现层使用,但自从MVC规范出来以后,明确了Servlet的指责仅作为控制器使用, ...

  6. js中三个默认方法call,applay,bind

    这三个都是函数自带的方法(Function.prototype),这三个方法都能够改变函数内部 this的指向, call //call方法接收三个参数,第一个是this指向,第二个,三个是传递给函数 ...

  7. 淘宝内部分享:MySQL & MariaDB性能优化

    发表于2015-01-20 16:26| 28875次阅读| 来源mysql.taobao.org| 22 条评论| 作者淘宝数据库团队 MySQL性能优化淘宝数据库 摘要:MySQL是目前使用最多的 ...

  8. 反射常用API

    反射所有功能都是通过class API来实现的 class常用API有: 1.class.GETINTERFACES():获得这个类实现的接口. 2.class.getMethods() Method ...

  9. Python学习-修饰器 - itemgetter的妙用

    下面这篇对装饰器讲的很好,懂了. http://python.jobbole.com/85056/ <简单 12 步理解 Python 装饰器> 使用装饰器非常简单(见步骤10),但是写装 ...

  10. 彻底解决Android GPS没法定位这一顽固问题

    大家去网上搜索Android定位location为null没法定位问题.预计有一大堆文章介绍怎样来解决.可是最后大家发现基本没用. 本文将从Android定位实现原理来深入分析没法定位原因并提出真正的 ...