首页 > 网络技术 > 正文

java多线程编程,编程JAVA 实现使用多线程数字从10到1两个线程的交替输出

2020-05-20 09:41:53  来源:http://www.capsicumpm.com  编辑:admin

java多线程编程之连续打印abc的几种解法

package com.demo.test;/*** 基于两个lock实现连续打印abcabc....* @author lixiaoxi* */public class TwoLockPrinter implements Runnable { // 打印次数private static final int PRINT_COUNT = 10; // 前一个线程的打印锁private final Object fontLock; // 本线程的打印锁private final Object thisLock; // 打印字符private final char printChar; public TwoLockPrinter(Object fontLock, Object thisLock, char printChar) { this.fontLock = fontLock; this.thisLock = thisLock; this.printChar = printChar;}@Override public void run() { // 连续打印PRINT_COUNT次for (int i = 0; i < PRINT_COUNT; i++) { // 获取前一个线程的打印锁synchronized (fontLock) { // 获取本线程的打印锁synchronized (thisLock) { //打印字符 System.out.print(printChar); // 通过本线程的打印锁唤醒后面的线程// notify和notifyall均可,因为同一时刻只有一个线程在等待 thisLock.notify();} // 不是最后一次则通过fontLock等待被唤醒 // 必须要加判断,不然虽然能够打印10次,但10次后就会直接死锁if(i < PRINT_COUNT - 1){ try { // 通过fontLock等待被唤醒 fontLock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}} public static void main(String[] args) throws InterruptedException { // 打印A线程的锁Object lockA = new Object(); // 打印B线程的锁Object lockB = new Object(); // 打印C线程的锁Object lockC = new Object();// 打印a的线程Thread threadA = new Thread(new TwoLockPrinter(lockC, lockA, 'A')); // 打印b的线程Thread threadB = new Thread(new TwoLockPrinter(lockA, lockB, 'B')); // 打印c的线程Thread threadC = new Thread(new TwoLockPrinter(lockB, lockC, 'C')); // 依次开启a b c线程 threadA.start();Thread.sleep(100); // 确保按顺序A、B、C执行 threadB.start();Thread.sleep(100);threadC.start();Thread.sleep(100);}}

编程实现两个线程,一个进程输出10个计算机科学与技术,另一个进程输出Java语言。

public class Demo5 implements Runnable{@Overridepublic void run() {for (int i = 0; i <= 10; i++) {System.out.println(Thread.currentThread().getName());try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {Demo5 d = new Demo5();new Thread(d,"计算机科学与技术").start();new Thread(d,"java语言").start();}}

刚看完JAVA入门123,最多学到了多线程编程和基础的JAVA Swing,请问接下来应该看什么书

单方面发展吧,继续专研java 可以往深处;jvm虚拟机;java spring mvc ,java web,java dubbo ;分布式运算,方向;java的优势 :平台无关化,可以在linux ;Windows ;安卓手机;在大数据方面,java的效率要高于C# ,低于C和C++ ;在免费的资源前提下下;C# 只能在Windows上运行;

Java多线程编程的精要有哪些

在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持。本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观。读完本文以后,用户应该能够编写简单的多线程程序。为什么会排队等待?下面的这个简单的 Java 程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性地移动。此外,因为所需的资源 — 打印机、磁盘、数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含明显的等待时间。因此,程序在访问数据库之前必须等待打印机完成打印文件的任务,等等。如果您正在等待程序的完成,则这是对计算资源和您的时间的一种拙劣使用。改进此程序的一种方法是使它成为多线程的。四项不相关的任务class myclass {static public void main(String args) { print_a_file; manipulate_another_file; access_database; draw_picture_on_screen; }}在本例中,每项任务在开始之前必须等待前一项任务完成,即使所涉及的任务毫不相关也是这样。但是,在现实生活中,我们经常使用多线程模型。我们在处理某些任务的同时也可以让孩子、配偶和父母完成别的任务。例如,我在写信的同时可能打发我的儿子去邮局买邮票。用软件术语来说,这称为多个控制(或执行)线程。可以用两种不同的方法来获得多个控制线程:多个进程在大多数操作系统中都可以创建多个进程。当一个程序启动时,它可以为即将开始的每项任务创建一个进程,并允许它们同时运行。当一个程序因等待网络访问或用户输入而被阻塞时,另一个程序还可以运行,这样就增加了资源利用率。但是,按照这种方式创建每个进程要付出一定的代价:设置一个进程要占用相当一部分处理器时间和内存资源。而且,大多数操作系统不允许进程访问其他进程的内存空间。因此,进程间的通信很不方便,并且也不会将它自己提供给容易的编程模型。线程线程也称为轻型进程 (LWP)。因为线程只能在单个进程的作用域内活动,所以创建线程比创建进程要廉价得多。这样,因为线程允许协作和数据交换,并且在计算资源方面非常廉价,所以线程比进程更可龋线程需要操作系统的支持,因此不是所有的机器都提供线程。Java 编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,这样就对线程提供了强健的支持。

求JAVA多线程编程代码

测试过了,没问题。基本思路,实例化一个桥类,谁得到桥的可用标志谁过桥。我第一个看到这个100分的,说实话,知道你是个学生要代码而已,线程类好久没练手了,练习一下而已,否则真不会给你写代码。因为我读书的时候也发过类似的求助,知道什么感受。不懂的时候真的没办法,所以告诉你思路。package cn.thread;public class Through_out_bridge { public static void main(String[] args) { Bridge b = Bridge.getInstance();//实例化桥 //实例化左端9个人,此时所有人都不能过桥,桥的可以状态标志为不可以用 for (int i = 1; i <= 9; i++) { Thread t = new Thread(new Person(false, i, b)); t.start(); } //实例化右端12个人,此时所有人都不能过桥,桥的可以状态标志为不可以用 for( int i=1 ;i<=12;i++) { Thread t = new Thread(new Person(true,i,b)); t.start(); } //桥的可用状态给左端第10个人,可以自定义给谁 b.state = true; Thread t = new Thread(new Person(false, 10, b)); }}class Person implements Runnable { public Bridge bridge;//桥 private String hand;//在桥哪一端 int No;//序号 public Person(boolean side, int i, Bridge bridge) { this.No = i; this.bridge = bridge; if(bridge.state) { System.out.println(i+"已经过桥。"); } if (side) { this.hand = new String("右"); } else { this.hand = new String("左"); } } //过桥方法 public synchronized void through() throws InterruptedException { if (bridge.state) { System.out.println(hand+"边第"+No + "在过桥"); bridge.open( No); } else { bridge.lock(No); } } public void run() { try { Thread.sleep(1000);// System.out.println(No+hand+" 边已经过桥!"); through(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}class Bridge { //可用状态判断true:可用 public boolean state = false; //自行实例化 public static Bridge getInstance() { return new Bridge(); } public synchronized void open(int i) throws InterruptedException { if (state) { Thread.sleep(1000); this.state=true; notify(); } } public synchronized void lock(int i) throws InterruptedException { if (!state) { this.state=false; System.out.println(i + " 在等待."); wait(); } }}