java-多线程知识

几个排序算法比较

  • 采用多线程实现几个排序算法,比较各个排序算法的优劣;
  • java实现,一个主类,多个内部排序算法进程的接口,涉及到进程间的通信,因为每个进程包含自己的储存空间,无法直接访问其他线程的数据,可以在创建线程时,传入数据;
package app;import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Thread;class AppFrame extends JFrame 
{//主类数据变量int[] Array = new int[20000];   //待排序数组Thread[] thread = new Thread[6];//进程数组,用于存储进程//构造函数public AppFrame() {thread[0] = new BubbleSortThread(0);thread[1] = new QuickSortThread(1);thread[2] = new SelectSortThread(2);thread[3] = new InsertSortThread(3);thread[4] = new HeapSortThread(4);thread[5] = new MergSortThread(5); }public void ThreadStart{for(int i=0;i<thread.length;i++){thread[i].start();//启动线程}}//内部类,各类排序算法线程class BubbleSortThread extends Thread implements Runnable{private int key;            //指定类线程在thread数组中的存储位置public BubbleSortThread(int k){key = k;}public void run()            //为每个进程重写run功能{//冒泡算法实现int[] bubble= new int[20000];System.arraycopy(Array, 0, bubble, 0, 20000);boolean exchange = true;for (int i = 1; i < bubble.length && exchange; i++) {exchange = false;for (int j = 0; j < bubble.length - i; j++) {if (bubble[j] > bubble[j + 1]) {int temp = bubble[j];bubble[j] = bubble[j + 1];bubble[j + 1] = temp;exchange = true;}}}}}//快速排序算法进程实现class QuickSortThread extends Thread implements Runnable {private int key;public QuickSortThread(int k) {key = k;}private void quickSort(int[] table, int low, int hight) {if (low < hight) {int i = low;int j = hight;int vot = table[i];while (i != j) {while (i < j && vot <= table[j]) {j--;}if (i < j) {table[i] = table[j];i++;}while (i < j && table[i] < vot) {i++;}if (i < j) {table[j] = table[i];j--;}}table[i] = vot;quickSort(table, low, j - 1);quickSort(table, i + 1, hight);}}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);quickSort(table, 0, table.length - 1);}}//选择排序class SelectSortThread extends Thread implements Runnable {private int key;public SelectSortThread(int k) {key = k;}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);for (int i = 0; i < table.length - 1; i++) {int min = i;for (int j = i + 1; j < table.length; j++) {if (table[j] < table[min])min = j;if (min != i) {int temp = table[i];table[i] = table[min];table[min] = temp;}}}}}//插入排序class InsertSortThread extends Thread implements Runnable {private int key;public InsertSortThread(int k) {key = k;}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);for (int i = 1; i < table.length; i++) {int temp = table[i];int j;for (j = i - 1; j > -1 && temp < table[j]; j--) {table[j + 1] = table[j];}table[j + 1] = temp;}}}//小堆排序class HeapSortThread extends Thread implements Runnable{private int key;public HeapSortThread(int k) {key = k;}private void sift(int[] table, int low, int hight) {int i = low;int j = 2 * i + 1;int temp = table[i];while (j <= hight) {if (j < hight && table[j] > table[j + 1])j++;if (temp > table[j]) {table[i] = table[j];i = j;j = 2 * i + 1;} elsej = hight + 1;}table[i] = temp;}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);int n = table.length;for (int j = n / 2 - 1; j >= 0; j--) {sift(table, j, n - 1);}for (int j = n - 1; j > 0; j--) {int temp = table[0];table[0] = table[j];table[j] = temp;sift(table, 0, j - 1);}}}//归并排序class MergSortThread extends Thread implements Runnable {private int key;public MergSortThread(int k) {key = k;}private void merg(int[] x, int[] y, int m, int r, int n) {int i = m, j = r, k = m;while (i < r && j < r + n && j < x.length) {if (x[i] < x[j]) {y[k++] = x[i++];}else {y[k++] = x[j++];}while (i < r) {y[k++] = x[i++];}while (j < r + n && j < x.length) {y[k++] = x[j++];}}}private void mergepass(int[] x, int[] y, int n) {int i = 0;while (i < x.length - 2 * n + 1) {merg(x, y, i, i + n, n);i += 2 * n;}if (i + n < x.length) {merg(x, y, i, i + n, n);} else {for (int j = i; j < x.length; j++) {y[j] = x[j];}}}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);int n = 1;int[] y = new int[table.length];do {mergepass(table, y, n);n *= 2;if (n < table.length) {mergepass(y, table, n);n *= 2;}} while (n < table.length);}}
}public class App {public static void main(String[] args) throws Exception {AppFrame appframe=new AppFrame();appframe.setVisible(true);appframe.ThreadStart();//同时启动线程运行}
}
  • 这指示一个基本框架思路,涉及到一些知识,旨在学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Idea中在代码顶部添加自定义作者和时间

一、在工具栏找到File>settings>Editor>File and Code Templates 二、选择右边的File Header,在编辑框中添加自定义信息&#xff0c;例如&#xff1a; 三、然后点击应用&#xff0c;保存就OK啦&#xff01; 转载于:https://www.cnblogs.com/HelloBigTable/p/10261145.…

MFC框架解析

通过上述方法&#xff0c;我们进行代码的编写&#xff0c;创建一个空项目&#xff0c;我们要编写MFC应有程序&#xff0c;因此设置项目的属性&#xff0c; 项目->属性->链接器->系统->子系统为&#xff1a;窗口 (/SUBSYSTEM:WINDOWS)&#xff0c;项目->属性-&g…

162年难题,黎曼猜想被印度数学家迎刃而解?克雷数研所发出质疑

来源 &#xff1a; 新智元黎曼猜想又被证明了&#xff1f;5年前&#xff0c;印度一名数学物理学家Kumar Easwaran声称自己证明了「黎曼猜想」&#xff01;他发表了一篇论文「The Final and Exhaustive Proof of the Riemann Hypothesis from First Principles」解释自己的发现&…

js构造函数内存在的闭包

function Func(x) { this.x x; this.printfunction() { console.info(this.x); (function (){ console.info(x); })(); }}var a new Func(30);console.dir(a);a.age 300;console.dir(a.print());//300,30//存在于构造函数内的闭包 age:30 发生了闭包//this.print 内存在闭包…

MFC的六大关键技术

//main.h头文件 #pragma once #include"a.h" class CShape { public:virtual CRuntimeClassTest* GetRuntimeClassTest() const;BOOL IsKindOf(const CRuntimeClassTest* pClass) const; public:static CRuntimeClassTest classCShape; };static char szCShape[] &q…

20210709未来智能实验室收录资料

整理&#xff1a;未来智能实验室1.加州理工博士&#xff1a;用概率模型解析大脑中的神经活动2.智能化战争的基本形态 3.联合全域指挥控制的人工智能生态系统| 新品推荐4.数字化转型白皮书&#xff1a;数智技术驱动智能制造&#xff0c;42页pdf5.2021综述论文《几何深…

HTTP的请求报文与响应报文

报文&#xff1a; 简单来说&#xff0c;报文就是也就是HTTP报文&#xff0c;作用是在各个系统之间进行和响应时用来交换与传输的数据单元&#xff0c;即站点一次性要发送的数据块&#xff0c;这些数据块以一些文本形式的元信息开头&#xff0c;这些信息描述了报文的内容及含义&…

MFC关键技术-动态创建

//a.h头文件 #pragma once #include"m.h" #include<iostream> using namespace std;class CShape;//类声明//RTTI结构体 struct CRuntimeClassTest {LPCSTR m_lpszClassName;int m_nObjectSize;UINT m_wSchema;CShape*(PASCAL*m_pfnCreateShape)();//PASCAL宏为…

谷歌利用人工智能设计的芯片揭示了智能的本质

来源&#xff1a;TechTalks 网站作者&#xff1a;Ben Dickson译者&#xff1a;Sambodhi策划&#xff1a;刘燕InfoQ 中文站曾经翻译并分享过《谷歌的深度学习在 AI 芯片中找到了一条关键路径》&#xff0c;该文介绍了 ZDNet 与谷歌大脑总监 Jeff Dean 谈到谷歌如何使用人工智能来…

MFC关键技术-永久保存机制

//Main.h文件 #pragma once #include<afxwin.h>class CEllipse :public CObject {DECLARE_SERIAL(CEllipse)private:double m_point; public:CEllipse(){}void Serialize(CArchive&); };//Main.cpp文件 #include"main.h"IMPLEMENT_SERIAL(CEllipse, CObjec…

2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...

来源&#xff1a;AIII研究院备受全球人工智能界关注的2021世界人工智能大会最高奖项——卓越人工智能引领者奖&#xff08;Super AI Leader&#xff0c;简称SAIL奖&#xff09;今天在大会开幕式揭晓。获得2021 SAIL奖的是——利物浦大学机器人科学家、中科院上海微系统所免开颅…

ReentrantLock学习

对于并发工作&#xff0c;你需要某种方式来防止两个任务访问相同的资源&#xff0c;至少在关键阶段不能出现这种冲突情况。防止这种冲突的方法就是当资源被一个任务使用时&#xff0c;在其上加锁。在前面的文章--synchronized学习中&#xff0c;我们学习了Java中内建的同步机制…

2021年,深度学习还有哪些未饱和、有潜力且处于上升期的研究方向?

来自&#xff1a;知乎 作者&#xff1a;谢凌曦、数据误码率、Zhifeng编辑&#xff1a;极市平台 在目前的深度学习领域&#xff0c;有些研究方向已经较为成熟&#xff0c;实现新突破的难度与过去相比显著提升。那么就目前来看&#xff0c;还有哪些方向处于朝阳阶段&#xff0c;相…

832. Flipping an Image

题目来源&#xff1a; 自我感觉难度/真实难度&#xff1a; 题意&#xff1a; 分析&#xff1a; 自己的代码&#xff1a; class Solution(object):def flipAndInvertImage(self, A):""":type A: List[List[int]]:rtype: List[List[int]]"""B[]row…

浙江发布数字化改革标准化体系建设方案,将于2025年底建成

来源&#xff1a;中新网近日&#xff0c;记者从浙江省市场监管局获悉&#xff0c;《浙江省数字化改革标准化体系建设方案(2021-2025年)》(以下简称《方案》)已正式印发&#xff0c;该《方案》为浙江省数字化改革标准化体系建设工作明确了总体框架、分阶段目标、重点任务和相关保…

MFC基于对话框的商场交易软件实现

void CHomeViewDlg::OnClickedBtGuke() {// TODO: 在此添加控件通知处理程序代码CUserLoginDlg dlg;//注册窗框口类对象User user;user.m_UserType _T("顾客");dlg.SetUser(user);dlg.DoModal();//进入注册窗口窗口 }void CHomeViewDlg::OnClickedBtShangjia() {// …

GPU的发展历程、未来趋势及研制实践

来源&#xff1a;文章转载自期刊《微纳电子与智能制造》&#xff0c;作者&#xff1a;熊庭刚摘要凭借GPU强大的计算能力&#xff0c;超级计算机在数据处理、物理模拟、天气预测、现代制药、基因测序、先进制造、人工智能、密码分析等方面都有着广泛的应用。在2020年的新冠肺炎疫…

Mysql Explain的简单使用

Mysql Explain 主要重要的字段有上面红色方框圈出来的那几个。 type: 连接类型&#xff0c;一个好的SQL语句至少要达到range级别&#xff0c;杜绝出现all级别。key: 使用到的索引名&#xff0c;如果没有选择索引&#xff0c;值是NULL。可以采取强制索引方式。key_len: 索引长度…